Rx,Reactive Extension,源於微軟,火於NetFlix。html
在線編輯器jsbin.react
CDN:https://unpkg.com/rxjs/bundles/rxjs.umd.min.js es6
Rx理解:把任何變化想象成依據事件緯度變化的事件流ajax
rxjs庫編輯器
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.0-beta.12/Rx.min.js"></script>
把input事件轉換爲Observable學習
es6代碼spa
console.log('RxJS included?', !!Rx); const height=document.getElementById("height"); const height$ =Rx.Observable.fromEvent(height,'keyup'); height$.subscribe(val=>console.log(val.target.value))
效果code
Rx有不少強大的運算符,能夠合併轉換流。cdn
html:htm
<input type="number" id="length"> <input type="number" id="width"> <div id="area"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.0-beta.12/Rx.min.js"></script>
js:
console.log('RxJS included?', !!Rx); const length=document.getElementById("length"); const width=document.getElementById("width"); const area=document.getElementById("area"); const length$ =Rx.Observable.fromEvent(length,'keyup').pluck('target','value'); const width$ =Rx.Observable.fromEvent(width,'keyup').pluck('target','value'); const area$=Rx.Observable.combineLatest(length$,width$,(l,w)=>{return l*w}); area$.subscribe(val=>{console.log(val);area.innerHTML=val})
只要一個流有最新值就會從新計算一遍。
combineLatest使用場景:width,height沒有值時不計算,都有值時根據任意一個值的最新值從新計算。
zip使用場景:width,height沒有值時不計算,新值成對出現再計算。
利用這些運算符很快拼裝成複合需求的邏輯,這些流主動把數據推給你,你只要去訂閱就好。
本文做者starof,因知識自己在變化,做者也在不斷學習成長,文章內容也不定時更新,爲避免誤導讀者,方便追根溯源,請諸位轉載註明出處:http://www.javashuo.com/article/p-vrspahmc-br.html 有問題歡迎與我討論,共同進步。