初識(shí)ReactJS

ReactJS簡(jiǎn)介

React 起源于 Facebook 的內(nèi)部項(xiàng)目,因?yàn)樵摴緦?duì)市場(chǎng)上所有 JavaScript MVC 框架,都不滿意,就決定自己寫(xiě)一套,用來(lái)架設(shè) Instagram 的網(wǎng)站。做出來(lái)以后,發(fā)現(xiàn)這套東西很好用,就在2013年5月開(kāi)源了。由于 React 的設(shè)計(jì)思想極其獨(dú)特,屬于革命性創(chuàng)新,性能出眾,代碼邏輯卻非常簡(jiǎn)單。所以,越來(lái)越多的人開(kāi)始關(guān)注和使用,認(rèn)為它可能是將來(lái) Web 開(kāi)發(fā)的主流工具。

對(duì)ReactJS的認(rèn)識(shí)及ReactJS的優(yōu)點(diǎn)

  • React不是一個(gè)完整的MVC框架,最多可以認(rèn)為是MVC中的V(View),甚至React并不非常認(rèn)可MVC開(kāi)發(fā)模式;
  • React的服務(wù)器端Render能力只能算是一個(gè)錦上添花的功能,并不是其核心出發(fā)點(diǎn),事實(shí)上React官方站點(diǎn)幾乎沒(méi)有提及其在服務(wù)器端的應(yīng)用;
  • React和Web Component兩者并不是完全的競(jìng)爭(zhēng)關(guān)系,你完全可以用React去開(kāi)發(fā)一個(gè)真正的Web Component;
  • React不是一個(gè)新的模板語(yǔ)言,JSX只是一個(gè)表象,沒(méi)有JSX的React也能工作。

1. ReactJS的原理
在Web開(kāi)發(fā)中,我們總需要將變化的數(shù)據(jù)實(shí)時(shí)反應(yīng)到UI上,這時(shí)就需要對(duì)DOM進(jìn)行操作。而復(fù)雜或頻繁的DOM操作通常是性能瓶頸產(chǎn)生的原因。React為此引入了虛擬DOM的機(jī)制:在瀏覽器端用Javascript實(shí)現(xiàn)了一套DOM API?;赗eact進(jìn)行開(kāi)發(fā)時(shí)所有的DOM構(gòu)造都是通過(guò)虛擬DOM進(jìn)行,每當(dāng)數(shù)據(jù)變化時(shí),React都會(huì)重新構(gòu)建整個(gè)DOM樹(shù),然后React將當(dāng)前整個(gè)DOM樹(shù)和上一次的DOM樹(shù)進(jìn)行對(duì)比,得到DOM結(jié)構(gòu)的區(qū)別,然后僅僅將需要變化的部分進(jìn)行實(shí)際的瀏覽器DOM更新。而且React能夠批處理虛擬DOM的刷新,在一個(gè)事件循環(huán)(Event Loop)內(nèi)的兩次數(shù)據(jù)變化會(huì)被合并,例如你連續(xù)的先將節(jié)點(diǎn)內(nèi)容從A變成B,然后又從B變成A,React會(huì)認(rèn)為UI不發(fā)生任何變化,而如果通過(guò)手動(dòng)控制,這種邏輯通常是極其復(fù)雜的。盡管每一次都需要構(gòu)造完整的虛擬DOM樹(shù),但是因?yàn)樘摂MDOM是內(nèi)存數(shù)據(jù),性能是極高的,而對(duì)實(shí)際DOM進(jìn)行操作的僅僅是Diff部分,因而能達(dá)到提高性能的目的。這樣,在保證性能的同時(shí),開(kāi)發(fā)者將不再需要關(guān)注某個(gè)數(shù)據(jù)的變化如何更新到一個(gè)或多個(gè)具體的DOM元素,而只需要關(guān)心在任意一個(gè)數(shù)據(jù)狀態(tài)下,整個(gè)界面是如何Render的。

基于React的開(kāi)發(fā)思路,你永遠(yuǎn)只需要關(guān)心數(shù)據(jù)整體,兩次數(shù)據(jù)之間的UI如何變化,則完全交給框架去做??梢钥吹?,使用React大大降低了邏輯復(fù)雜性,意味著開(kāi)發(fā)難度降低,可能產(chǎn)生Bug的機(jī)會(huì)也更少。

2. 組件化
虛擬DOM不僅帶來(lái)了簡(jiǎn)單的UI開(kāi)發(fā)邏輯,同時(shí)也帶來(lái)了組件化開(kāi)發(fā)的思想,所謂組件,即封裝起來(lái)的具有獨(dú)立功能的UI部件。React推薦以組件的方式去重新思考UI構(gòu)成,將UI上每一個(gè)功能相對(duì)獨(dú)立的模塊定義成組件,然后將小的組件通過(guò)組合或者嵌套的方式構(gòu)成大的組件,最終完成整體UI的構(gòu)建。

如果說(shuō)MVC的思想讓你做到視圖-數(shù)據(jù)-控制器的分離,那么組件化的思考方式則是帶來(lái)了UI功能模塊之間的分離。

React完全是一個(gè)新的思路,開(kāi)發(fā)者從功能的角度出發(fā),將UI分成不同的組件,每個(gè)組件都獨(dú)立封裝。

整個(gè)UI是一個(gè)通過(guò)小組件構(gòu)成的大組件,每個(gè)組件只關(guān)心自己部分的邏輯,彼此獨(dú)立。

一個(gè)組件應(yīng)該具有如下特征:

  • 可組合:一個(gè)組件易于和其它組件一起使用,或者嵌套在另一個(gè)組件內(nèi)部。如果一個(gè)組件內(nèi)部創(chuàng)建了另一個(gè)組件,那么說(shuō)父組件擁有它創(chuàng)建的子組件,通過(guò)這個(gè)特性,一個(gè)復(fù)雜的UI可以拆分成多個(gè)簡(jiǎn)單的UI組件;

  • 可重用:每個(gè)組件都是具有獨(dú)立功能的,它可以被使用在多個(gè)UI場(chǎng)景;

  • 可維護(hù):每個(gè)小的組件僅僅包含自身的邏輯,更容易被理解和維護(hù);

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,917評(píng)論 25 709
  • 作者:雲(yún)霏霏原文地址:http://www.cnblogs.com/yunfeifei/ 現(xiàn)在最熱門(mén)的前端框架有A...
    IT程序獅閱讀 1,596評(píng)論 1 38
  • 一、why React? React是Facebook開(kāi)發(fā)的一款JS庫(kù)。React一般被用來(lái)作為MVC中的V層,它...
    amm0117閱讀 11,303評(píng)論 0 1
  • React 入門(mén)實(shí)例教程 轉(zhuǎn)載(加入了自己的一些東西,推薦看原文):一看就懂的ReactJs入門(mén)教程(精華版) ...
    驀然之間的閱讀 444評(píng)論 0 0
  • 冬至。 他看著我,慢慢俯下身子,在我的耳邊輕輕的說(shuō)出這兩個(gè)字,我沒(méi)去看他,周邊朋友的笑談聲和鼠標(biāo)鍵盤(pán)奏出的噼里啪啦...
    胡曉楓閱讀 183評(píng)論 0 0

友情鏈接更多精彩內(nèi)容