一、react的重要認(rèn)知
本人也剛?cè)腴Treact,以下是在自己理解的基礎(chǔ)上發(fā)表的個(gè)人觀點(diǎn),歡迎探討!
React 起源于 Facebook 的內(nèi)部項(xiàng)目,意在解決隨時(shí)間數(shù)據(jù)不斷變化的大規(guī)模應(yīng)用程序開發(fā),react可以表現(xiàn)出應(yīng)用程序在任何時(shí)間點(diǎn)的樣子,底層數(shù)據(jù)改變時(shí),react的虛擬DOM機(jī)制會自動(dòng)重新渲染,更新界面。
這里強(qiáng)調(diào)一下Facebook開發(fā)React有大公司的痛點(diǎn),千人開發(fā)團(tuán)隊(duì)所面臨的技術(shù)細(xì)分與整合是React誕生的原因,模塊化,組件化是中大型公司必然要走的路,這種方式對管理帶來的優(yōu)勢不言而喻。
React不是一個(gè)完整的MVC框架,最多可以認(rèn)為是MVC中的V(View),做過后臺開發(fā)的人都知道View其實(shí)是視圖層,也就是動(dòng)態(tài)可擴(kuò)展的這一層,React要完成的使命就是讓以前大型項(xiàng)目復(fù)雜頁面可分離,易擴(kuò)展。
二、React的優(yōu)勢
React的虛擬DOM:React在瀏覽器端用Javascript實(shí)現(xiàn)了一套DOM API。基于React進(jìn)行開發(fā)時(shí)所有的DOM構(gòu)造都是通過虛擬DOM進(jìn)行,每當(dāng)數(shù)據(jù)變化時(shí),React都會重新構(gòu)建整個(gè)DOM樹,然后React將當(dāng)前 整個(gè)DOM樹和上一次的DOM樹進(jìn)行對比,得到DOM結(jié)構(gòu)的區(qū)別,然后僅僅將需要變化的部分進(jìn)行實(shí)際的瀏覽器DOM更新。
React能夠批處理虛擬 DOM的刷新,在一個(gè)事件循環(huán)(Event Loop)內(nèi)的兩次數(shù)據(jù)變化會被合并,例如你連續(xù)的先將節(jié)點(diǎn)內(nèi)容從A變成B,然后又從B變成A,React會認(rèn)為UI不發(fā)生任何變化,而如果通過手動(dòng)控制,這種邏輯通常是極其復(fù)雜的。盡管每一次都需要構(gòu)造完整的虛擬DOM樹,但是因?yàn)樘摂MDOM是內(nèi)存數(shù)據(jù),性能是極高的,而對實(shí)際DOM進(jìn)行操作的僅僅是 Diff部分,因而能達(dá)到提高性能的目的。
這樣,在保證性能的同時(shí),開發(fā)者將不再需要關(guān)注某個(gè)數(shù)據(jù)的變化如何更新到一個(gè)或多個(gè)具體的DOM元素,而只需要 關(guān)心在任意一個(gè)數(shù)據(jù)狀態(tài)下,整個(gè)界面是如何Render的。
組件化:構(gòu)建可組合的組件(組件:對數(shù)據(jù)和方法的簡單封裝,封裝起來的具有獨(dú)立功能的UI部件),是代碼復(fù)用、測試和關(guān)注分離。React推薦以組件的方式去重新思考UI構(gòu)成,將UI上每一個(gè)功能相對獨(dú)立的模塊定義 成組件,然后將小的組件通過組合或者嵌套的方式構(gòu)成大的組件,最終完成整體UI的構(gòu)建。
MVC的思想讓你做到視圖-數(shù)據(jù)-控制器的分離,那么組件化的思考方式則是帶來了UI功能模塊之間的分離。
三、Web系統(tǒng)是否選擇React
我也是現(xiàn)在站在應(yīng)用新技術(shù)開發(fā)的十字路口,下面拋出幾種現(xiàn)實(shí)的問題,方便大家對號入座。
新項(xiàng)目超過10人協(xié)作開發(fā),且有對應(yīng)的前端,對頁面響應(yīng)速度還是有追求的,那么react的模塊化與VDOM必將在后期帶來清晰的管理,協(xié)作會變的簡單,雖然前期會有點(diǎn)疼,但是,革命就需要有付出,經(jīng)歷短暫的痛苦
團(tuán)隊(duì)中沒有人使用過React,且大家習(xí)慣用常規(guī)UI框架,并不是互聯(lián)網(wǎng)化的中大型前端應(yīng)用,那么對React的使用就看團(tuán)隊(duì)leader是否愿意接受它
互聯(lián)網(wǎng)化的中大型前端應(yīng)用,那么React是首選,如果團(tuán)隊(duì)沒有人愿意接受它的設(shè)計(jì)理念,那就另當(dāng)別論
后臺管理系統(tǒng)對頁面的響應(yīng)速度沒有硬性要求,所以如果項(xiàng)目足夠大,使用React必將帶來清晰的開發(fā)思路,如果團(tuán)隊(duì)前后端人員基本持平,對軟件的整體質(zhì)量會有很大提升
團(tuán)隊(duì)開發(fā)web系統(tǒng)沒有做前后端分離,那么使用react那就是自找死路,增加開發(fā)復(fù)雜度,老老實(shí)實(shí)的用Angular或者JQuery這樣全面的框架,搭配UI框架是真理。
以上說這么多,其實(shí)就是讓大家正在對React做技術(shù)選型時(shí),有一個(gè)參考,不喜勿噴。