說說 vue1 vue2 和 vue3 的區別

2022-01-18 20:12:35 字數 1418 閱讀 8742

面試時被問到,那就趁機梳理一下 vue 的演進吧

詳見從vue 1.x 遷移

生命週期

比如說 beforecompile 移除, 使用 created 替代,compiled 移除,使用 mounted 替換等

語法新陣列語法 (value, index) in arr,並丟棄 $index 和 $key

過濾器廢棄,不再這樣寫}

,改而在方法裡自己做好分割

單向資料流思想引入

v-model 變為語法糖,本質上變成了 emit 了乙個 input 事件,並且在本元件內觸發它的更新。

$dispatch 和 $broadcast 廢棄

引入 vdom 虛擬節點

解偶 html 依賴,從此可以渲染到 dom 意外的平台上,比如說 ssr。

vue 3 原始碼:

使用了 proxy 替代 object.defineproperty

目前,vue 的反應系統是使用 object.defineproperty 的 getter 和 setter。 但是,vue 3 將使用 es2015 proxy 作為其觀察者機制。 這消除了以前存在的警告,使速度加倍,並節省了一半的記憶體開銷。

為了繼續支援 ie11,vue 3 將發布乙個支援舊觀察者機制和新 proxy 版本的構建

而為什麼使用 proxy 替代 object.defineproperty?proxy 可以劫持整個物件,並返回乙個新的物件。proxy 不僅可以**物件,還可以**陣列,還可以**動態增加的屬性。節省記憶體,速度加倍。關於 proxy api 參見 mdn

新增 hook api

注意 setup

count is }

plusone is }

count++

使用 setup 的好處都有啥?詳細參見尤雨溪 - 聊聊 vue.js 3.0 beta 官方直播完整版 2020-04-21,摘錄幾點

讓 vue 更快的優化

像是重寫虛擬dom,優化插槽生成,靜態樹提公升,靜態屬性提公升。詳見尤雨溪 - 聊聊 vue.js 3.0 beta 官方直播完整版 2020-04-21,本人也整理了一篇 vue 3.0 beta 編譯優化研究。簡言之,vue 3 已經能做到 diff 時,只對有變數的區域遍歷,靜態的節點直接復用物件不需要 diff。

其他支援

更好的ts支援,vue 3 直接用 ts 重寫。

從用 vue 1.x 開始到現在 vue 3.x 登場,中間過去 4 年了吧,不知不覺 vue 都做了如此多的改進,若不是查了下資料我甚至都想不起來 vue 的 vdom 是在 vue 2.x 時引入的。

從vue 1.x 遷移

vue.js 3.0 新特性預覽

mdn proxy

精讀《vue3.0 function api》

Vue2和Vue3的區別

vue2 的雙向資料繫結是利用es5 的乙個 api object.definepropert 對資料進行劫持 結合 發布訂閱模式的方式來實現的。vue3 中使用了 es6 的 proxyapi 對資料 相比於vue2.x,使用proxy的優勢如下 1 defineproperty只能監聽某個屬性,...

vue2和vue3的區別

vue2 vue3 安裝npm install vue cli g npm install vue cli g 解除安裝npm install vue cli g npm install vue cli g 圖形介面 vue ui 無圖形介面 建立專案 vue init webpack demo v...

vue2與vue3的區別

vue2和vue3開發元件有什麼區別 vue2和vue3雙向資料繫結的區別 vue2的雙向資料繫結是利用es5 的乙個 apiobject.definepropert 對資料進行劫持 結合 發布訂閱模式的方式來實現的。vue3中使用了 es6 的proxyapi 對資料 相比於vue2.x,使用pr...