vue和react有什麼區別?

Crazier_Z發表於2024-04-27

(1)核心思想不同

vue:靈活易用的漸進式框架,進行資料攔截/代理,它對偵測資料的變化更敏感、更精確

react:React推崇函數語言程式設計(純元件),資料不可變以及單向資料流,當然需要雙向的地方也可以手動實現, 比如藉助onChangesetState來實現

(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各有兩個頭尾的變數StartIdxEndIdx,它們的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

相關文章