(讀書筆記)深入淺出React(一):React的設(shè)計哲學(xué)

上一篇文章介紹了React的目的,就是開發(fā)數(shù)據(jù)不斷變化的大型應(yīng)用程序携茂,而這其中的關(guān)鍵就是虛擬DOM讳苦,而JSX就是一種利用HTML語法來構(gòu)建虛擬DOM的語言鸳谜。

使用JSX定義直觀的用戶界面

JSX是將HTML直接嵌入到JavaScript中的一種XML語法咐扭,拋開了傳統(tǒng)的將業(yè)務(wù)和邏輯相分離的“最佳實踐”蝗肪。

它的語法很像HTML穗慕,但并不是HTML逛绵。之后JSX通過翻譯器轉(zhuǎn)換到純JavaScript再由瀏覽器執(zhí)行。

可以將JSX理解為一個比較高級但很直觀的語法糖胰苏。

它使用了js自帶的語法和特性硕并,而不需要使用模板引擎埃仪,使開發(fā)人員只需要利用代碼去構(gòu)建整個界面卵蛉。

JSX中的大花括號中是JavaScript語法傻丝。

在JSX中使用樣式,屬性值不能為字符串而必須為對象允睹。所以JSX中的樣式都用兩個大花括號括起來胁澳,第一個大花括號是標(biāo)準(zhǔn)JSX語法,代表這其中是JavaScript語法胰丁,第二個大花括號代表這是JavaScript的對象表達式锦庸。

所謂組件,其實就是狀態(tài)機器

React將界面看做簡單的狀態(tài)機器扬卷。當(dāng)組件處于某個狀態(tài)時,那么就輸出這個狀態(tài)對應(yīng)的用戶界面

React的組件與外界交互的除了狀態(tài)(state)外徒恋,還有就是屬性(props)基括。屬性一般被認(rèn)為是只讀的,在組件初始化的時候傳入匠璧,是不可修改的。而狀態(tài)是用來更新組件UI的酿雪,一般由組件內(nèi)部去維護。

組件很少需要對外公開方法醋安,唯一的交互途徑就是props。

每個子節(jié)點都是通過父節(jié)點的render方法去構(gòu)造的柠辞。

每個組件都會有一個render方法,這個方法返回組件的實例。最終整個界面得到一棵虛擬DOM樹间螟。

每一次界面變化都是整體刷新

React通過框架自身解決了局部UI需要更新的問題荣瑟。實現(xiàn)途徑就是通過虛擬DOM

而局部UI更新最重要的就是React的Diff算法嚷掠。

Diff算法基于兩種假設(shè):

  1. 不同類型的組件產(chǎn)生不同的DOM結(jié)構(gòu)熊楼。
  2. 對于同一層次的一組子節(jié)點鲫骗,它們可以通過唯一的id進行區(qū)分枕磁。

單向數(shù)據(jù)流動Flux

Flux定義了一種單向數(shù)據(jù)流的方式,來實現(xiàn)View和Model之間的數(shù)據(jù)流動峭咒。

Flux是一種單向數(shù)據(jù)流單向數(shù)據(jù)綁定的思想,用來定義組件之間組件和數(shù)據(jù)模型之間如何通信。

Redux霍狰、Reflux康震、Flummox都屬于Flux的第三方實現(xiàn)。

雙向數(shù)據(jù)綁定是指Model可以引起View的變化。View也可以接受用戶輸入引起Model的變化。

Flux中的Store是存儲應(yīng)用程序的狀態(tài)郎嫁。

對于一個小組件泽铛,狀態(tài)可以在內(nèi)部進行維護。

而對于多個組件構(gòu)成的應(yīng)用程序瓢喉,某些需要組件之間共享的狀態(tài)要放到Store中進行維護栓票。

每當(dāng)Store發(fā)生變化時,View也會進行相應(yīng)更新愕够。

Flux引入了DispatcherAction的概念走贪,Dispatcher是一個全局的分發(fā)器負責(zé)接收Action,而Action可以來自于用戶的某個界面操作惑芭,也可以來自于服務(wù)器端的某個數(shù)據(jù)更新坠狡。

只讀數(shù)據(jù)模型:Immutability

React提倡利用只讀數(shù)據(jù)來建立數(shù)據(jù)模型。所有數(shù)據(jù)都是只讀的遂跟,如果需要修改某個數(shù)據(jù)逃沿,只能產(chǎn)生一份新的數(shù)據(jù)婴渡。

原文:http://www.infoq.com/cn/articles/react-art-of-simplity

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市感挥,隨后出現(xiàn)的幾起案子缩搅,更是在濱河造成了極大的恐慌,老刑警劉巖触幼,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件硼瓣,死亡現(xiàn)場離奇詭異,居然都是意外死亡置谦,警方通過查閱死者的電腦和手機堂鲤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來媒峡,“玉大人瘟栖,你說我怎么就攤上這事×掳ⅲ” “怎么了半哟?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長签餐。 經(jīng)常有香客問我寓涨,道長,這世上最難降的妖魔是什么氯檐? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任戒良,我火速辦了婚禮,結(jié)果婚禮上冠摄,老公的妹妹穿的比我還像新娘糯崎。我一直安慰自己,他們只是感情好河泳,可當(dāng)我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布沃呢。 她就那樣靜靜地躺著,像睡著了一般乔询。 火紅的嫁衣襯著肌膚如雪樟插。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天竿刁,我揣著相機與錄音黄锤,去河邊找鬼。 笑死食拜,一個胖子當(dāng)著我的面吹牛鸵熟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播负甸,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼流强,長吁一口氣:“原來是場噩夢啊……” “哼痹届!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起打月,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤队腐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奏篙,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柴淘,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年秘通,在試婚紗的時候發(fā)現(xiàn)自己被綠了为严。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡肺稀,死狀恐怖第股,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情话原,我是刑警寧澤夕吻,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站繁仁,受9級特大地震影響梭冠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜改备,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蔓倍。 院中可真熱鬧悬钳,春花似錦、人聲如沸偶翅。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽聚谁。三九已至母剥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間形导,已是汗流浹背环疼。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留朵耕,地道東北人炫隶。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像阎曹,于是被迫代替她去往敵國和親伪阶。 傳聞我的和親對象是個殘疾皇子煞檩,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,654評論 2 354

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