一. 函數式編程前端
React 把用戶界面抽象成一個個組件,如按鈕組件 Button、對話框組件 Dialog、日期組件 Calendar。 開發者經過組合這些組件,最終獲得功能豐富、可交互的頁面。經過引入 JSX 語法,複用組件變得很是容易, 同時也能保證組件結構清晰。有了組件這層抽象,React 把代碼和真實渲染目標隔離開來,除了能夠在瀏覽器 端渲染到 DOM 來開發網頁外,還能用於開發原生移動應用。
二 虛擬DOMreact
DOM操做的效率是很低的,並且不是通常的慢,並且這也是引起性能問題的常見問題之一。爲何會慢呢? 由於對 DOM的修改成影響網頁的用戶界面,重繪頁面是一項昂貴的操做。太多的DOM操做會致使一系列的重 繪操做,爲了確保執行結果的準確性,全部的修改操做是按順序同步執行的。咱們稱這個過程叫作迴流 (reflow),同時這也是最昂貴的瀏覽器操做之一。迴流操做主要會發生在幾種狀況下:
真實頁面對應一個 DOM 樹。在傳統頁面的開發模式中,每次須要更新頁面時,都要手動操做DOM進行更新。DOM 操做很是昂貴。咱們都知道在前端開發中,性能消耗最大的就是 DOM 操做,並且這部分代碼會讓總體項目的代碼變得難以維護。React 把真實 DOM 樹轉換成 JavaScript 對象樹,每次數據更新後,從新計算 Virtual DOM,並和上一次生成的 Virtual DOM 作對比,對發生變化的部分作批量更新。React 也提供了直觀的 houldComponentUpdate 生命週期回調,來減小數據變化後沒必要要的 Virtual DOM 對比過程,以保證性能。咱們說 Virtual DOM 提高了 React 的性能,但這並非 React 的惟一亮點。此外,Virtual DOM的渲染方式也比傳統 DOM 操做好一些,但並不明顯,由於對比 DOM 節點也是須要計算資源的。它最大的好處其實還在於方便和其餘平臺集成,好比 react-native 是基於 Virtual DOM 渲染出原生控件,由於 React 組件能夠映射爲對應的原生控件。在輸出的時候,是輸出 Web DOM,仍是 Android 控件,仍是 iOS 控件,就由平臺自己決定了。所以,react-native 有一個口號——LearnOnce,Write Anywhere。