2016-08-28 40 views
5

abone üzerine yeni değerler iter, ben RxJSKoans aracılığıyla çalışıyorum ve sonuçların dizide beslenme yinelenen bir modeli görüyorum:Değişmez veri yapılarına sahip RxJS?

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

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

Bu açıkça bir saf olmayan fonksiyondur; result dizisi abone tarafından dönüştürülür.

Immutable.js aracını kullanarak bunu bir bıçak haline getiren small-scale projects on Github'u gördüm ancak hiçbiri etkin olarak korunmuyor.

Genel olarak kabul edilemez bir uygulama modeli olup olmadığını merak ediyorum ve olmasın, neden olmasın?

cevap

5

bir desen demezdim, ancak bir dere içinden şeyi geçebilir beri de herhangi değişmez veri yapısında geçirebilirsiniz:

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/[email protected]/dist/global/Rx.umd.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

Ayrıca

hiçbir yoktur Dış durum olarak result olması için neden. scan gibi yöntemler bu içindir. Bu sana (dahili) durumunu yönetmek için yapmamızı önerirsin olur ise:

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/[email protected]/dist/global/Rx.umd.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

+1

Bunun bazı rxjs operatörleri javascript diziler ile çalışmak olsa uyarmak değil List ile olur. Daha sonra, düzleştirme işlecinizi data.toJS() 'i döndüren bir rxjs' map' operatörüne, diğeri ise 'Immutable.fromJS (data) 'yapmanıza gerek kalmaz. Yine de sık sık olmaz. –