Vue2、Vue3區別

index項目Vue2Vue3
1生命週期函數beforeCreate與createdstepup代替beforeCreate與created
2響應式原理apiEs5 Object.defineProperty()進⾏數據劫持,結合發布訂閱的⽅式實現使⽤的是Es6 Proxy代理,使⽤ref或者reactive將數據轉化為響應式數據
3渲染策略提供類似於HTML的模板語法,將模板編譯成渲染函數來返回虛擬DOM樹
1.在DOM樹級別。
2.編譯器積極地檢測模板中的靜態節點、子樹甚至數據對象,並在生成的代碼中將它們提升到渲染函數之外
3.在元素級別。編譯器還根據需要執行的更新類型,為每個具有動態綁定的元素生成一個優化標誌。例如,具有動態類綁定和許多靜態屬性的元素將收到一個標誌,提示只需要進行類檢查。運行時將獲取這些提示並採用專用的快速路徑。
4Diff算法的提升小於Vue3大於Vue2
5打包體積變化未使用的代碼文件都被打包了進去,所以後期項目大了,打包文件會特別多還很大允許現代模式下的module bundler能夠靜態地分析模塊依賴關係,並刪除與未使用的module.exports屬性相關的代碼。模板編譯器還生成了對樹抖動友好的代碼,只有在模板中實際使用某個特性時,該代碼才導入該特性的幫助程序
6建立數據 data選項類型API(Options API)組合類型API(Composition API)
7typeScript的支持支持類型的,用的是Facebook的Flow做類型檢查 借鑒了react hook實現了更自由的編程方式,提出了Composition API,Composition API不需要通過指定一長串選項來定義組件,而是允許用戶像編寫函數一樣自由地表達、組合和重用有狀態的組件邏輯,同時提供出色的TypeScript支持。
8事件偵聽器緩存 綁定事件每次觸發都要重新生成全新的function去更新 提供了事件緩存對象,cacheHandlers,當 cacheHandlers 開啟,會自動生成一個內聯函數,同時生成一個靜態節點。當事件再次觸發時,只需從緩存中調用即可,無需再次更新
9異步組件-defineAsyncComponent:
loader:同工廠函數;
loadingComponent:加載異步組件時展示的組件;
errorComponent:加載組件失敗時展示的組件;
delay:顯示loadingComponent之前的延遲時間,單位毫秒,默認200毫秒;
timeout:如果提供了timeout,並且加載組件的時間超過了設定值,將顯示錯誤組件,默認值為Infinity(單位毫秒);
suspensible:異步組件可以退出控制,並始終控制自己的加載狀態。具體可以參考文檔;
onError:一個函數,該函數包含4個參數,分別是error、retry、fail和attempts,這4個參數分別是錯誤對象、重新加載的函數、加載程序結束的函數、已經重試的次數。
10自定義渲染render
h 從 Vue 2.x 的參數傳遞,改為全域導入
渲染函數參數的更動,使狀態元件和函數式元件之間更加一致。
vnode 現在有一個扁平的 prop 結構。
h 現在是全域導入,而不是作為參數自動傳遞,render 函式不再接收任何參數。。