1. 程式人生 > 其它 >vue2和vue3的區別

vue2和vue3的區別

1、雙向資料繫結原理不同

vue2:vue2的雙向資料繫結是利用ES5的一個API,Object.definePropert()對資料進行劫持,結合釋出訂閱模式的方式來實現的。
vue3:vue3中使用了ES6的Proxy API對資料代理。相比vue2x,使用proxy的優勢如下:

  • defineProperty只能監聽某個屬性,不能對全域性物件監聽
  • 可以省去for in,閉包等內容來提升效率(直接繫結整個物件即可)
  • 可以監聽陣列,不用再去單獨的對陣列做特異性操作vue3.x可以檢測陣列內部資料的變化。
2.是否支援碎片

vue2:vue2不支援碎片。
vue3:vue3支援碎片(Fragments),就是說可以擁有多個根節點。

3、API型別不同

vue2:vue2使用選項型別api,選項型api在程式碼裡分割了不同的屬性:data,computed,methods等。
vue3:vue3使用合成型api,新的合成型api能讓我們使用方法來分割,相比於舊的api使用屬性來分組,這樣程式碼會更加簡便合整潔。

4、定義資料變數合方法不同

vue2:vue2是把資料放入data中,在vue2中定義資料變數是data(){},建立的方法要在methods:{}中。
vue3:vue3就需要使用一個新的setup()方法,此方法在元件初始化構造的時候觸發。使用以下三個步驟來建立反應性資料;

  • 從vue引入ref/reactive;
  • 使用reactive()方法來宣告資料為響應式資料;
  • 使用setup() 方法來返回我們的響應性資料,從而template可以獲取這些響應性資料。
5、生命週期鉤子函式不同

vue2:vue2生命週期

  • beforeCreate元件建立之前
  • created 元件建立之後
  • beforeMount元件掛載到頁面之前執行
  • mounted元件掛載到頁面之後執行
  • beforeUpdate元件更新之前
  • updated元件更新之後

vue3:vue3生命週期

  • setup開始建立元件
  • onBeforeMount元件掛載到頁面之前執行
  • onMounted元件掛載到頁面之後執行
  • onBeforeUpdate元件更新之前
  • onUpdated元件更新之後

而且vue3.x生命週期在呼叫前需要先進行引入。除了這些鉤子函式外,vue3.x還增加了onRenderTracked和onRenderTriggered函式。

6、父子傳參不同

vue2:父傳子,用props,子傳父用事件 Emitting Events。在vue2中,會呼叫this$emit然後傳入事件名和物件。
vue3:父傳子,用props,子傳父用 Emitting Events。在vue3中的setup()中的第二個引數content物件中就有emit,那麼我們只要在setup()接收第二個引數中使用分解物件法取出emit就可以在setup方法中隨意使用了。

7、指令與插槽不同

vue2:vue2中使用slot可以直接使用slot;v-for與v-if在vue2中優先順序高的是v-for指令,而且不建議一起使用。
vue3:vue3中必須使用v-slot的形式;vue3中v-for與v-if只會把當前v-if當作v-for中的一個判斷語句,不會相互衝突;vue3中移除keyCode作為v-on的修飾符,當然也不支援config.keyCodes;vue3中移除v-on.native修飾符;vue3中移除過濾器filter。

8、main.js檔案不同

vue2:vue2中我們可以使用pototype(原型)的形式去進行操作,引入的是建構函式。
vue3:vue3中需要使用結構的形式進行操作,引入的是工廠函式;vue3中app元件中可以沒有根標籤。