面試時被問到,那就趁機梳理一下 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...