目前JavaScript MVC框架已經(jīng)有很多了,為什么還要構(gòu)造React呢,為什么我們要使用它?
React 不是一個(gè)MVC框架
React是一個(gè)構(gòu)造可組合式用戶界面的庫。它鼓勵創(chuàng)建可重用的UI組件顯示會隨著時(shí)間而改變的數(shù)據(jù)。
React 不使用模板
傳統(tǒng)上,web應(yīng)用UIs使用模板或者h(yuǎn)tml指令構(gòu)造。這些模板規(guī)定一套完整的抽象使你可以去構(gòu)建你的UI。
不同的,React處理構(gòu)建用戶界面通過將他們分解成組件。這意味著,React使用一個(gè)真正的、全功能的編程語言去渲染視圖,我們可以看到作為一個(gè)優(yōu)勢模板的一些原因:
- JavaScript是一個(gè)靈活的強(qiáng)大的編程語言,具有構(gòu)建抽象的能力。這是非常重要的在一個(gè)大型應(yīng)用中。
- 通過統(tǒng)一相應(yīng)的視圖邏輯標(biāo)簽,React可以使構(gòu)建的視圖更容易擴(kuò)展和維護(hù)。
- 通過整合標(biāo)簽和內(nèi)容到j(luò)avascript,不需要手動連接字符串因此可以減少XSS漏洞面積。
假如你更喜歡原始的HTML去編寫javascript,我們還創(chuàng)建了JSX
,一個(gè)可選的語法擴(kuò)展。
被動更新非常簡單
React真正亮點(diǎn)是當(dāng)你的數(shù)據(jù)隨時(shí)間改變時(shí)。
在一個(gè)傳統(tǒng)的javascript應(yīng)用中,你需要考慮數(shù)據(jù)的變化然后指示DOM做出變化使其保持最新的。甚至AngularJS,提供一個(gè)聲明式接口經(jīng)由指令和數(shù)據(jù)綁定請求一個(gè)關(guān)聯(lián)的函數(shù)去手動的更新DOM結(jié)點(diǎn)。
React采用不同的方法。
當(dāng)組件第一次初始化時(shí),render
方法被調(diào)用,為視圖生成一個(gè)輕量級的表現(xiàn)。通過這個(gè)表現(xiàn),產(chǎn)生一個(gè)標(biāo)簽字符串,然后插入到文檔中。當(dāng)數(shù)據(jù)變化時(shí),render
方法再次被調(diào)用。為了盡可能有效的完成更新,我們比較之前調(diào)用render
返回的值與新的值,然后產(chǎn)生一個(gè)最小限度的變更去應(yīng)用到DOM中。
render
返回的數(shù)據(jù)既不是一個(gè)字符串也不是一個(gè)DOM結(jié)點(diǎn)。它是一個(gè)輕量級的類型,描述DOM應(yīng)該是什么樣的。
因?yàn)檫@個(gè)重新渲染是非常快的(TodoMVC 1毫秒左右),開發(fā)者不需要明確的指定數(shù)據(jù)綁定。我們發(fā)現(xiàn)這個(gè)方法更容易去構(gòu)建應(yīng)用程序。
HTML 僅僅是個(gè)開始
因?yàn)镽eact有自己的輕量級的文檔表現(xiàn),我們可以用它做一些很酷的事情:
- Facebook動態(tài)表格可以通過
<canvas>
渲染取代HTML. - Instagram是一個(gè)'single page'網(wǎng)頁應(yīng)用完全由React和
Backbone.Router
構(gòu)建的。設(shè)計(jì)者可以像通常一樣使用JSX編寫React代碼。 - 我構(gòu)建內(nèi)部的應(yīng)用雛形運(yùn)行React在一個(gè)web工作站上,使用React去驅(qū)動本地ios視圖通過一個(gè)
Objective-C
橋。 - 你可以運(yùn)行React在服務(wù)器上,便于SEO、性能、代碼分享和項(xiàng)目靈活性。
- 事件在全部現(xiàn)代瀏覽器(包括IE8)下表現(xiàn)一致性還有符合標(biāo)準(zhǔn)化,并且自動使用事件委派。
原文地址:http://facebook.github.io/react/blog/2013/06/05/why-react.html
英文很爛,通過字典翻譯軟件和自己的理解整理出來,如有問題或不恰當(dāng)之處,非常歡迎指出。