gpt4 book ai didi

immutability - 具有不可变数据结构的 RxJS?

转载 作者:行者123 更新时间:2023-12-04 05:23:48 26 4
gpt4 key购买 nike

我正在处理 RxJSKoans并且我看到一种重复输入结果数组的模式,订阅者将新值推送到:

var Rx = require('rx'),
Subject = Rx.Subject

var result = [];
var s1 = new Subject();
s1.subscribe(result.push.bind(result));
s1.onNext('foo');
result; // ['foo']

这显然是一个不纯的函数; result数组由订阅改变。

我见过 small-scale projects on Github使用 Immutable.js 对此进行了尝试,但没有积极维护。

我想知道是否有广泛采用的不可变实现模式,如果没有,为什么?

最佳答案

我不会称它为模式,但是由于您可以通过流传递所有内容,因此您还可以传入任何不可变的数据结构:

const stream$ = Rx.Subject.create();

stream$
.map(data => data.set('a', data.get('a') + 1))
.subscribe(data => console.log(data));

stream$.next(Immutable.Map({ a:1 }));
stream$.next(Immutable.Map({ a:2 }));
<script src="https://npmcdn.com/@reactivex/rxjs@5.0.0-beta.7/dist/global/Rx.umd.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>


此外,没有理由拥有 result作为外部状态。这就是 scan 之类的方法是给。这是我建议您管理(内部)状态的方法:

const stream$ = Rx.Subject.create();

stream$
.scan((list, val) => list.push(val), Immutable.List())
.subscribe(data => console.log(data));

stream$.next('foo');
stream$.next('bar');
<script src="https://npmcdn.com/@reactivex/rxjs@5.0.0-beta.7/dist/global/Rx.umd.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

关于immutability - 具有不可变数据结构的 RxJS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39196872/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com