使用 RxJS 创建一个切换按钮
Create a toggle button with RxJS
我对 Reactive Programming 的概念还很陌生,我只是在玩弄一下。为了实践我所学的知识,我决定在实际项目中使用 RxJS 编写一些代码,并且一切进展顺利。
现在我想创建一个简单的切换按钮:
let btn = $('button')[0]
let clicks = Rx.Observable.fromEvent(btn, 'click')
.map(function(clickEvent) {
// decide to return true/false
})
clicks.subscribe(value => {
// value is true or false
})
如果不在流中使用 DOM 方法,我就无法理解这个非常简单的练习。实际上,我只需要流中的最新值,然后将其反转 (!!value);
我该如何实现?
您的按钮是否仅通过 DOM 携带状态?在那种情况下,如果不查询 DOM 就不可能检索到该状态。
您可以考虑让您的状态脱离 DOM 并在没有 DOM 函数的情况下对其进行操作。也就是说,您有时需要更新 DOM 状态,但您可以在观察者的流之外进行更新。
像这样:
var button_initial_state = false; // false for unchecked
var button_state$ = Rx.Observable.fromEvent(btn, 'click')
.scan (function(current_state, event){
return !current_state;
}, button_initial_state)
.startWith(button_initial_state);
button_state$.subscribe (function (state){
// Code to set the button state in the DOM
})
相关文档:
我对 Reactive Programming 的概念还很陌生,我只是在玩弄一下。为了实践我所学的知识,我决定在实际项目中使用 RxJS 编写一些代码,并且一切进展顺利。
现在我想创建一个简单的切换按钮:
let btn = $('button')[0]
let clicks = Rx.Observable.fromEvent(btn, 'click')
.map(function(clickEvent) {
// decide to return true/false
})
clicks.subscribe(value => {
// value is true or false
})
如果不在流中使用 DOM 方法,我就无法理解这个非常简单的练习。实际上,我只需要流中的最新值,然后将其反转 (!!value);
我该如何实现?
您的按钮是否仅通过 DOM 携带状态?在那种情况下,如果不查询 DOM 就不可能检索到该状态。
您可以考虑让您的状态脱离 DOM 并在没有 DOM 函数的情况下对其进行操作。也就是说,您有时需要更新 DOM 状态,但您可以在观察者的流之外进行更新。
像这样:
var button_initial_state = false; // false for unchecked
var button_state$ = Rx.Observable.fromEvent(btn, 'click')
.scan (function(current_state, event){
return !current_state;
}, button_initial_state)
.startWith(button_initial_state);
button_state$.subscribe (function (state){
// Code to set the button state in the DOM
})
相关文档: