1. 程式人生 > 實用技巧 >Vue3的新特性及相關的Composition API使用

Vue3的新特性及相關的Composition API使用

首先 建立專案 Vue3

Vue3 相較於Vue2 的6大亮點:

1 效能快。 2 按需編譯 體積更小 3 提供了組合API 類似於react 的React Hooks 4 更好的Ts支援 5 暴露了自定義渲染的API 6 更先進的元件。

使用Vue3 建立專案 1 webpack 2 Vue-cli 3 vite

什麼是vite?

安裝vite :

npm install  -g create-vite-app

建立Vue3專案:

create-vite-app projectName

安裝依賴執行專案:

cd projectName
npm install 
npm run dev
組合API:

setup(){

}

函式是組合API的入口函式,通過匯入ref實時監聽變數的變化。並且通過組合API可以初始化變數的值。 最後通過return 暴露出去物件或者方法。

eg:

首先匯入ref:

其次,定義setup()函式:

ref函式的注意點:ref函式只能監聽簡單型別的變化,不能監聽複雜型別的變化 類似於(物件/陣列等)

監聽複雜型別的變化可以使用reactive函式來實現。

eg:

最後實現的整體的業務邏輯封裝之後如下所示:

模組化管理 封裝相關的功能函式並匯出 之後再App.vue中匯入使用:

組合API的本質及其使用:在使用過程中將Compisition API 資料和方法 注入到options API 的資料和方法當中。

setup函式執行時機以及注意點:

setup函式的執行時間,是在beforeCreate鉤子執行之前完成的。因此在setup函式中是無法使用data 和methods 的。並且為了避免錯誤的使用,直接將setup函式中的this修改成了undefined。

setup函式只能是同步的,不能夠是非同步的。

reactive函式:是Vue3中提供的實現響應式資料的方法。

reactive函式必須傳入一個物件(json 或者 array型別的都可以),本質是將傳入的資料包裝成一個Proxy物件。

如果傳遞了其他的物件,預設情況下修改物件,介面不會自動更新,如果需要跟新,則需要重新賦值。

ref的深刻理解:

ref 和reactive的區別:

Vue如何判斷一個數據是否是ref型別的或者是reactive型別的:

由私有屬性無法訪問,因此如果要判斷一個型別是否是ref型別的或者是reactive型別的 可以通過匯入函式isRef isReactive來實現:

遞迴監聽:

由於把每一層包裝成一個Proxy物件,因此十分的消耗效能。

非遞迴監聽:只能夠監聽第一層,不能夠監聽其他層。建立非遞迴的監聽的資料 (reactive 對應 shallowReactive) , (ref 對應於 shallowRef )

shallowRef使用的注意點:

可以通過triggerRef()方法實現ref 資料的主動的更新頁面資料。

shallowRef的本質:

toRaw方法:針對於reactive響應式資料的原始資料。

eg:

toRaw的主要使用特點:儲存原始資料,只更新原始資料,並不修改UI介面。

獲取ref型別的原始資料的方式:通過toRaw 方法 由於包裝成了reactive方法 所以需要使用.value來獲取原始的資料。

通過markRaw來實現永遠都不會追蹤原始資料:

toRef方法:

ref()方法對某一個物件中的屬性進行操作:如果將物件中的某一個屬性變為響應式資料,修改響應式的資料時不會影響到原始資料的變化。

ref() 和 toRef() 方法的區別和聯絡:

如果需要將某一個物件中的多個屬性變為響應式資料,可以採用toRefs()函式來實現。 只有一個屬性變為響應式資料的時候使用toRef()

import {toRefs } from 'vue';

setup(){
  let obj = {name:"kkl",age:18};  
  let state = toRefs(obj);
// 使用toRef()實現屬性變為響應式。
 // let name = toRef(obj,"name");
// let age = toRef(obj,'age');
function myFun(){ state.name.value = "zs"; state.age.value = 22; } return { state,myFun} } 可以將物件中的屬性全部變為響應式資料。