【发布时间】:2015-10-04 17:48:18
【问题描述】:
假设我有以下标记:
<button id="dec">-</button>
<output id="out">0</output>
<button id="inc">+</button>
<button id="res">RESET</button>
还有以下 Rx.js 脚本:
var total = 0
Rx.Observable.merge(
// decrement
Rx.Observable.fromEvent($('#dec'), 'click')
.map(function() { return -1 }),
// increment
Rx.Observable.fromEvent($('#inc'), 'click')
.map(function() { return +1 }),
// reset
Rx.Observable.fromEvent($('#res'), 'click')
.map(function() { return -total })
) // merge
.forEach(function(delta) {
total += delta
$('#out').text(total)
})
一切都按预期进行。单击 +/- 递增/递减计数器,然后单击“RESET”将其重置为零,但是......我在顶部有变量“total”。这就是状态,如果我订阅函数式反应式编程的价值观,那是邪恶的,不是吗?如果是这样,我该如何补救?如果我没有重置按钮,我可以使用scan(seed, accumulator),但是重置按钮的功能让我陷入了一个循环,至于如何做到“无状态”。
【问题讨论】:
标签: javascript counter rxjs