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(...)


使用相同的技术回答其问题的问题被问herehere

关于javascript - RxJS和React的setState-将函数执行延迟到订阅,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34866762/

10-10 00:29
查看更多