Vue和React的異同點解讀
一、核心設(shè)計理念的差異
組件形態(tài)的底層實現(xiàn)
- Vue:組件編譯后是包含 render/setup 方法的對象(通過 vue-loader 或 @vitejs/plugin-vue 將 SFC 轉(zhuǎn)換為對象)。
- React:組件本質(zhì)是函數(shù)(函數(shù)組件)或類(類組件),JSX 會被 Babel 編譯為
React.createElement
調(diào)用。
模板與 JSX 的編譯差異
- Vue:模板(Template)在編譯階段會被優(yōu)化為可追蹤依賴的渲染函數(shù),通過靜態(tài)分析實現(xiàn)靶向更新。
- React:JSX 編譯為純 JavaScript 函數(shù)調(diào)用,依賴開發(fā)者手動優(yōu)化(如
React.memo
)。
二、響應(yīng)式系統(tǒng)的實現(xiàn)
維度 | Vue | React |
---|---|---|
數(shù)據(jù)綁定 | 基于 Proxy/Object.defineProperty 的響應(yīng)式系統(tǒng),自動追蹤依賴 | 基于狀態(tài)(State)的不可變數(shù)據(jù)流,需手動觸發(fā)更新 |
更新粒度 | 組件級 + 屬性級靶向更新(通過虛擬 DOM 的 Block Tree 優(yōu)化) | 組件級更新(默認全量 Diff,依賴 Fiber 調(diào)度優(yōu)化) |
觸發(fā)方式 | 響應(yīng)式數(shù)據(jù)變更自動觸發(fā)渲染 | 需調(diào)用 setState 或 Hooks 函數(shù)觸發(fā)更新 |
三、虛擬 DOM 與 Diff 算法
Vue 的靶向更新
編譯時標記動態(tài)節(jié)點(如 {{ count }}
),Diff 時僅對比動態(tài)部分。
示例:
<!-- 編譯后生成 Block 標記 --> <h1>count的值是: {{ count }}</h1>
React 的 Fiber 架構(gòu)
- 將 Diff 過程拆分為可中斷的時間切片,優(yōu)先處理高優(yōu)先級任務(wù)(如動畫)。
- 全量 Diff 但通過 Fiber 鏈表結(jié)構(gòu)實現(xiàn)增量更新。
四、函數(shù)式編程的演進
框架 | 方案 | 底層實現(xiàn)差異 |
---|---|---|
Vue | Composition API | 基于響應(yīng)式系統(tǒng)的 setup 函數(shù),依賴閉包管理狀態(tài) |
React | Hooks | 依賴鏈表結(jié)構(gòu)維護狀態(tài)順序,要求 Hooks 調(diào)用順序穩(wěn)定 |
五、編譯時優(yōu)化對比
優(yōu)化策略 | Vue | React |
---|---|---|
靜態(tài)提升 | 將靜態(tài)節(jié)點提取為常量 | 無原生支持 |
樹結(jié)構(gòu)優(yōu)化 | Block Tree 減少 Diff 范圍 | 依賴開發(fā)者手動優(yōu)化 |
預(yù)字符串化 | 將靜態(tài) HTML 編譯為字符串常量 | 不支持 |
總結(jié)
相同點:虛擬 DOM、組件化、支持函數(shù)式編程。
核心差異:
- Vue 通過編譯時優(yōu)化 + 響應(yīng)式系統(tǒng)實現(xiàn)細粒度更新,React 依賴運行時調(diào)度(Fiber)實現(xiàn)可控的更新優(yōu)先級。
- Vue 的漸進式設(shè)計降低上手門檻,React 的函數(shù)式理念提供更高靈活性。
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue + typescript + video.js實現(xiàn) 流媒體播放 視頻監(jiān)控功能
視頻才用流媒體,有后臺實時返回數(shù)據(jù), 要支持flash播放, 所以需安裝對應(yīng)的flash插件。這篇文章主要介紹了vue + typescript + video.js 流媒體播放 視頻監(jiān)控,需要的朋友可以參考下2019-07-07詳解如何從零開始搭建Express+Vue開發(fā)環(huán)境
這篇文章主要介紹了詳解如何從零開始搭建Express+Vue開發(fā)環(huán)境,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-07-07vue開發(fā)chrome插件,實現(xiàn)獲取界面數(shù)據(jù)和保存到數(shù)據(jù)庫功能
這篇文章主要介紹了vue開發(fā)chrome插件,實現(xiàn)獲取界面數(shù)據(jù)和保存到數(shù)據(jù)庫功能的示例,幫助大家更好的理解和使用vue,感興趣的朋友可以了解下2020-12-12VUE頁面中通過雙擊實現(xiàn)復(fù)制表格中內(nèi)容的示例代碼
這篇文章主要介紹了VUE頁面中通過雙擊實現(xiàn)復(fù)制表格中內(nèi)容,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-06-06創(chuàng)建項目及包管理yarn create vite源碼學(xué)習(xí)
這篇文章主要為大家介紹了創(chuàng)建項目及包管理yarn create vite源碼學(xué)習(xí)分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-09-09