Vue3 響應(yīng)式API——Ref、Reactive

1. reactive api

為什么要使用reactive api,因為想要復(fù)刻options api的做法,在setup函數(shù)中是行不通的,data函數(shù)中定義的變量之所以是響應(yīng)式的,是因為經(jīng)過了reactive函數(shù)的處理。

可以看到這樣的寫法變量counter不是響應(yīng)式的。

使用reactive api修改之后:將counter放在對象中,由reactive函數(shù)處理,使用處理過的返回值中的couter

可以看到,此時state對象中的counter已經(jīng)是響應(yīng)式的了。

reactive api傳入類型必須是對象或者數(shù)組,這樣在使用時,需要用state.counter的形式來取用counter,感覺有點麻煩,這時Vue3提供了另一個api:ref api。

2.ref api

使用ref api需要注意的地方:

1.ref傳入類型:所有類型,比reactive api不受限制;

2.ref返回一個響應(yīng)式的對象,value屬性維護(hù)其值;

3.模板(template)中會自動解包,不需要以.value的形式獲取值,但setup函數(shù)中不會自動解包。

如果我將counter放在一個對象中,再使用ref,那么模板是否會自動解包:不會

4. 原因:ref的解包是一個淺層的解包

此時需要.value來獲取這個ref對象的值

但是reactive api 包裹的對象,可以深層解包

3.reactive判斷的api

1. isProxy: 檢查對象是否由reactive或readonly創(chuàng)建的proxy;

2. isReactive: 檢查對象是否是由 reactive創(chuàng)建的響應(yīng)式代理,但是如果該代理是 readonly 建的,但包裹了由 reactive 創(chuàng)建的另一個代理,它也會返回 true;

3.? isReadonly:?檢查對象是否是由 readonly 創(chuàng)建的只讀代理;

4.? toRaw: 返回 reactive 或 readonly 代理的原始對象(不建議保留對原始對象的持久引用)

5. shallowReactive: 創(chuàng)建一個響應(yīng)式代理,它跟蹤其自身 property 的響應(yīng)性,但不執(zhí)行嵌套對象的深層響應(yīng)式轉(zhuǎn)換(深層還是原生對象);

6. shallowReadonly: 創(chuàng)建一個 proxy,使其自身的 property 為只讀,但不執(zhí)行套對象的深度只讀轉(zhuǎn)換(深層還是可讀、可寫的);

4.Ref api 的補充

假如想對響應(yīng)式對象解構(gòu)賦值,盡管是reactive處理過的對象,解構(gòu)出來的值不會是響應(yīng)式的

想讓其成為響應(yīng)式的,可以使用toRefs api

1.toRefs api: 將reoctive對象中的所有屬性都轉(zhuǎn)成ref,建立連接

而且,toRefs api相當(dāng)于在info中的每一個屬性的value與解構(gòu)之后的值做了連接,一個更改之后另一個也會隨之更改

如果只想對其中一個屬性轉(zhuǎn)換為ref,那么可以使用toRef api

2.toRef: 對其中一個屬性進(jìn)行轉(zhuǎn)換ref,建立連接

格式:toRef(object,key)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容