2016-08-28 18 views
5

मैं 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 का उपयोग करने में एक चाकू बनाने के देखा है, लेकिन कोई भी सक्रिय रूप से बनाए रखा है।

इम सोच एक व्यापक रूप से अपनाया अपरिवर्तनीय कार्यान्वयन पद्धति नहीं है, और यदि नहीं, तो, क्यों?

उत्तर

5

मैं इसे एक पैटर्न फोन नहीं होगा, लेकिन जब से तुम एक धारा के माध्यम से सब कुछ पारित कर सकते हैं आप किसी भी अपरिवर्तनीय डेटा संरचना में पारित कर सकते हैं:

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>

इसके अलावा, वहाँ है कोई बाहरी स्थिति के रूप में 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/[email protected]/dist/global/Rx.umd.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

+1

मैं हालांकि कि कुछ rxjs ऑपरेटरों जावास्क्रिप्ट सरणियों के साथ काम को चेतावनी दी है, और सूची के साथ नहीं। इसके बाद आप सैंडविच के लिए() '' लौटने data.toJS एक rxjs 'map' ऑपरेटर के अंदर अपने सपाट ऑपरेटर, और अन्य कार्य कर रहा' Immutable.fromJS (डेटा) 'की है। हालांकि ऐसा नहीं होगा। –

संबंधित मुद्दे