RxJS有一个漂亮的函数fromCallback,该函数采用最后一个参数为回调的函数并返回Observable
。我想将其与React的setState
函数结合起来,这样我可以做类似的事情:
const setState = Rx.Observable.fromCallback(this.setState);
setState({ myState: 'Hi there!' }).concat(....)
因此,确保链接到setState的任何操作都可以在设置状态后发生,而且最重要的是,只有有活动的订阅者才能调用
setState
。但是我注意到的是,即使没有订阅,
setState
也将被正确定义并设置组件的状态。所以,如果我有:networkSignal.flatMap((x) => {
return setState({ myState: 'test' });
});
函数
setState
会立即被调用,但是它的生产者观察者只有在有订阅者的情况下才发送下一个。我想要的是仅在有订阅者时才调用的函数。查看源代码,您会看到RxJS返回一个函数,该函数在执行时会创建一个可观察的但立即调用的函数-回调参数。
最佳答案
fromCallback
返回一个函数,该函数在执行时将返回可观察值。可以观察到的是函数调用的异步结果流向的地方。
要延迟执行该功能,可以使用.defer
。例如:
const setState = Rx.Observable.fromCallback(this.setState);
const deferred$ = Rx.Observable.defer(function (){return setState({ myState: 'Hi there!' }).concat(....)});
// Later on
deferred$.subscribe(...)
使用相同的技术回答其问题的问题被问here和here
关于javascript - RxJS和React的setState-将函数执行延迟到订阅,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34866762/