小白視角看iflux

目錄

  • 參考文檔
  • what is iflux ?
  • react.js + immutable.js
  • React的界面刷新
  • Immutable的特點
  • flux簡介
  • iflux特性及demo

參考文檔

本人純前端小白,學(xué)習(xí)兩周基本知識后遇到了一個全新的框架----iflux侨舆,寫此博客整理和記錄學(xué)習(xí)內(nèi)容酷麦。先將參考文檔列出來强胰,方便大(自)家(己)的翻閱攀操。

what is iflux ?

什么是iflux呢庶灿?其實我也不知道梗摇,項目上要用而已(逃~~~)鹊漠。首先毁兆,我們先看iflux在npm上的 官方文檔 浙滤。

what is iflux ?

iflux = immutable.js + react.js

這個式子不懂沒關(guān)系。繼續(xù)往下翻文檔气堕,找到了這么一句話:

xxxxxxxx
xxxxxxxx
于是纺腊,順其自然的寫了iflux去更好的粘合React和immutable。

看到這里茎芭,思路就很清晰了:想學(xué)iflux揖膜,得先去學(xué)React和immutable。

react.js + immutable.js

  • React主要原理

React 是一個用于構(gòu)建用戶界面的 js 庫梅桩,最大的特點就是使用virtual DOM來對頁面進行描述壹粟。第一次看代碼時找了很久都沒找到HTML文件在哪,請教后才發(fā)現(xiàn)所有的標(biāo)簽都在React組件的render方法中宿百。當(dāng)React組件的參數(shù)(props)和狀態(tài)(state)發(fā)生改變時趁仙,就會觸發(fā)其生命周期,render方法中的虛擬DOM就會對界面進行刷新垦页。頁面刷新的效率非常高雀费。

總體流程就是這樣了。組件化也是React的特征之一外臂,render方法是React組件的重要生命周期坐儿。當(dāng)用戶對界面進行操作時,只要修改props和state屬性的值宋光,就能快速的對用戶操作進行反饋貌矿。但是,React畢竟只是管理界面的工具罪佳,對props和state的數(shù)據(jù)不能進行充分的管理逛漫,這時就要用到專門處理數(shù)據(jù)的Immutable。

  • Immutable的特點

Immutable的出現(xiàn)赘艳,解決了JS中的一個痛點:JS中的對象是引用賦值酌毡,新的對象簡單的引用了原始對象克握,兩個對象指向同一個地址,共享一個內(nèi)存空間枷踏。這樣就會使得原始對象中的數(shù)據(jù)變得不可靠菩暗。
程序猿們?yōu)榱私鉀Q這個問題發(fā)明了“淺拷貝”與“深拷貝”,其實就是把原對象的數(shù)據(jù)拷貝一份放在新的對象中旭蠕。這樣做顯得很笨重停团,而且浪費內(nèi)存空間。
immutable給出的解決方法就是對原數(shù)據(jù)對象新建一個代理對象掏熬。當(dāng)數(shù)據(jù)發(fā)生變動時佑稠,新生成變動數(shù)據(jù)的備份,與其他不變的數(shù)據(jù)一起返回給新的變量旗芬。雖然兩者共享了數(shù)據(jù)舌胶,但是變量是指向兩個不同的地址的。這樣就能既完成值傳遞疮丛,又能節(jié)省內(nèi)存了幔嫂。
當(dāng)然immutable也有其他的優(yōu)點,但其處理數(shù)據(jù)對象的高效完美的與React的參數(shù)數(shù)據(jù)契合这刷,使用immutable來管理React的狀態(tài)(state)就變得理所當(dāng)然了婉烟。

flux簡介

介紹完React和Immutable,界面和數(shù)據(jù)都能進行處理了暇屋,那我們完全可以將所有的數(shù)據(jù)都作為React組件的state屬性似袁,當(dāng)任意數(shù)據(jù)發(fā)生改變即狀態(tài)(state)發(fā)生改變,就立即會刷新界面咐刨。flux便是在此設(shè)想上進行了完善形成的昙衅。

Flux將一個應(yīng)用分成四個部分:

  • View: 視圖層
  • Action(動作):視圖層發(fā)出的消息(比如mouseClick)
  • Dispatcher(派發(fā)器):用來接收Actions、執(zhí)行回調(diào)函數(shù)
  • Store(數(shù)據(jù)層):用來存放應(yīng)用的狀態(tài)定鸟,一旦發(fā)生變動而涉,就提醒Views要更新頁面


圖為flux的運轉(zhuǎn)流程,在我們設(shè)想的基礎(chǔ)上联予,完成了數(shù)據(jù)的"單向流動"啼县,數(shù)據(jù)變得可控是flux的優(yōu)點之一。Flux 架構(gòu)入門教程中介紹了Action和Dispatcher沸久,完全可以跳過不看季眷,我看了也只得出一個結(jié)論:太繁雜了!這就給flux提供了改良的空間卷胯,也是iflux出現(xiàn)的重要原因子刮。

iflux簡介

此時我們再打開 iflux 官方介紹 看一看iflux的流程圖。

+-----------------------+
|       WebApi          |
+-----------------------+
          |  
         \|/
+-----------------------+
|   Store(immutable)   |<-----+
+-----------------------+      |
           | //es5 style       |
           | StoreMixin        | msg(EventEmitter)
          \|/                  |
+------------------------+     |
|     React App          |-----|
+------------------------+
|      <Layout>          |
|        <SearchForm/>   |
|        <Toolbar/>      |
|        <DataGrid/>     |
|       </Layout>        |
+------------------------+

iflux針對flux的Action和Dispatcher的分層窑睁,提出了一個解決方案:一個應(yīng)用只有一個Store挺峡,單根數(shù)據(jù)源葵孤。這樣就完全不需要Action和Dispatcher了,使得框架更加的扁平化橱赠。文檔中作者的思路說的很清楚尤仍。

整體思路:
  • React只承擔(dān)view應(yīng)該承擔(dān)的事情(1. 資料呈現(xiàn) 2. 用戶交互) 不處理任何的業(yè)務(wù)邏輯,就是根據(jù)數(shù)據(jù)去渲染dom即可狭姨,這樣view可以做的很輕吓著。
  • 應(yīng)用的全部數(shù)據(jù)沉淀在一個Store中,當(dāng)全部數(shù)據(jù)在頂層時送挑,很多事情都變得簡單,因為獲取數(shù)據(jù)變得十分廉價暖眼。無論是校驗和對數(shù)據(jù)的轉(zhuǎn)換控制都變得非常簡單惕耕。
  • React只是取數(shù)據(jù)渲染,其他的比如狀態(tài)的變化全部通過事件pubsub通知appstore去更新數(shù)據(jù)诫肠。如果狀態(tài)不會影響其他組件的級聯(lián)變化可以放在組件內(nèi)部消化掉司澎。
  • 所有的ajax封裝在webapi模塊中,全部promise化栋豫〖钒玻回調(diào)回來通過cursor更新store, cursor更新store, store通知React去rerender丧鸯。
  • 區(qū)分View component 和 pure component蛤铜。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市丛肢,隨后出現(xiàn)的幾起案子围肥,更是在濱河造成了極大的恐慌,老刑警劉巖蜂怎,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穆刻,死亡現(xiàn)場離奇詭異,居然都是意外死亡杠步,警方通過查閱死者的電腦和手機氢伟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來幽歼,“玉大人朵锣,你說我怎么就攤上這事∈怎铮” “怎么了猪勇?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颠蕴。 經(jīng)常有香客問我泣刹,道長助析,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任椅您,我火速辦了婚禮外冀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘掀泳。我一直安慰自己雪隧,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布员舵。 她就那樣靜靜地躺著脑沿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪马僻。 梳的紋絲不亂的頭發(fā)上庄拇,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天,我揣著相機與錄音韭邓,去河邊找鬼措近。 笑死,一個胖子當(dāng)著我的面吹牛女淑,可吹牛的內(nèi)容都是我干的瞭郑。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼鸭你,長吁一口氣:“原來是場噩夢啊……” “哼屈张!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起袱巨,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤袜茧,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后瓣窄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笛厦,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年俺夕,在試婚紗的時候發(fā)現(xiàn)自己被綠了裳凸。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡劝贸,死狀恐怖姨谷,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情映九,我是刑警寧澤梦湘,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響捌议,放射性物質(zhì)發(fā)生泄漏哼拔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一瓣颅、第九天 我趴在偏房一處隱蔽的房頂上張望倦逐。 院中可真熱鬧,春花似錦宫补、人聲如沸檬姥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽健民。三九已至,卻和暖如春贫贝,著一層夾襖步出監(jiān)牢的瞬間荞雏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工平酿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人悦陋。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓蜈彼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親俺驶。 傳聞我的和親對象是個殘疾皇子幸逆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內(nèi)容