【发布时间】:2015-11-16 00:30:16
【问题描述】:
有人可以帮我如何将 React State 绑定到 RxJS Observable 吗?我做了某事
componentDidMount() {
let source = Rx.Observable.of(this.state.val)
}
理想的结果是,每当this.state.val 更新(通过this.setState(...))source 也得到更新,所以我可以将source 与其他RxJS 可观察流结合起来。
但是,在这种情况下,source 仅更新一次,即使在更新 this.state.val 并重新渲染组件之后也是如此。
// Ideal result:
this.state.val = 1
source.subscribe(val => console.log(x)) //=> 1
this.state.val = 2
source.subscribe(val => console.log(val)) //=> 2
// Real result:
this.state.val = 1
source.subscribe(val => console.log(x)) //=> 1
this.state.val = 2
source.subscribe(val => console.log(val)) //=> 1 ???WTH
这可能是因为componentDidMount() 在 React 生命周期中只调用了一次。所以我将source 移动到componentDidUpdate(),每次渲染组件后都会调用它。但是,结果仍然保持不变。
那么问题是如何让source 在this.state.val 更新时更新?
更新:这是我用来解决问题的解决方案,使用Rx.Subject
// Component file
constructor() {
super(props)
this.source = new Rx.Subject()
_onChangeHandler(e) {
this.source.onNext(e.target.value)
}
componentDidMount() {
this.source.subscribe(x => console.log(x)) // x is updated
}
render() {
<input type='text' onChange={this._onChangeHandler} />
}
//
【问题讨论】:
标签: javascript reactjs rxjs