(1)核心思想不同
vue:靈活易用的漸進式框架,進行資料攔截/代理,它對偵測資料的變化更敏感、更精確
react:React推崇函數語言程式設計(純元件),資料不可變以及單向資料流,
當然需要雙向的地方也可以手動實現, 比如藉助onChange
和setState
來實現
(2)元件寫法差異
vue:Vue 推薦的做法是 template 的單檔案元件格式,即 html,css,JS 寫在同一個檔案(vue也支援JSX寫法)
react:React推薦的做法是JSX + inline style,
也就是把 HTML 和 CSS 全都寫進 JavaScript 中,即 all in js
;
(3)diff演算法不同
vue:updateChildren
是vue diff的核心, 過程可以概括為:
舊children
和新children
各有兩個頭尾的變數StartIdx
和EndIdx
,它們的2個變數相互比較,一共有4種比較方式- 如果4種比較都沒匹配,如果設定了key,就會用key進行比較,在比較的過程中,變數會往中間靠,一旦
StartIdx>EndIdx
表明舊children
和新children
至少有一個已經遍歷完了,就會結束比較
Vue2的核心Diff演算法採用了雙端比較的演算法,同時從新舊children的兩端開始進行比較,藉助key值找到可複用的節點,再進行相關操作。相比React的Diff演算法,同樣情況下可以減少移動節點次數,減少不必要的效能損耗,更加的優雅
react:1)react首先對新集合進行遍歷,for( name in nextChildren)
2)透過唯一key來判斷老集合中是否存在相同的節點,如果沒有的話建立
3)如果有的話,if (preChild === nextChild )
-
- 會將節點在新集合中的位置和在老集合中lastIndex進行比較
如果
if (child._mountIndex < lastIndex)
進行移動操作,否則不進行移動操作- 如果遍歷的過程中,發現在新集合中沒有,但在老集合中有的節點,會進行刪除操作
(4)響應式原理不同
vue:
- Vue依賴收集,自動最佳化,資料可變
- Vue遞迴監聽data的所有屬性,直接修改
- 當資料改變時,自動找到引用元件重新渲染
react:
React基於狀態機,手動最佳化,資料不可變,需要setState
驅動新的state替換老的state。當資料改變時,以元件為根目錄,預設全部重新渲染, 所以 React 中會需要 shouldComponentUpdate
這個生命週期函式方法來進行控制
詳細請訪問連結,本文參考自此:https://blog.csdn.net/jin_kwok/article/details/80105462