亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Vue3中reactive丟失響應(yīng)式的問題解決(避大坑!)

 更新時間:2023年07月27日 15:51:15   作者:喝西瓜汁的兔嘰Yan  
這篇文章主要給大家介紹了關(guān)于Vue3中reactive丟失響應(yīng)式的問題解決,vue3中reactive定義的引用類型直接賦值導(dǎo)致數(shù)據(jù)失去響應(yīng)式 ,需要的朋友可以參考下
在vue3中,我們定義響應(yīng)式數(shù)據(jù)無非是ref和reactive。但是有的小伙伴會踩雷!導(dǎo)致定義的響應(yīng)式丟失的問題。

reactive丟失響應(yīng)式的情況1(直接賦值)

場景:
1.你定義了一個數(shù)據(jù):let data=reactive({
          name:"",
          age:""
})
2.然后你請求了接口,賦值給data
let res=await getUserApi();  //請求接口
data=res.data;                     //將返回的結(jié)果賦值給data

大錯特錯?。?!

reactive丟失響應(yīng)式的情況2(解構(gòu)賦值)

場景:
1.你定義了一個數(shù)據(jù):let data=reactive({
          name:"",
          age:""
})
2.然后你解構(gòu)了
let {name}=data; //解構(gòu)賦值

大錯特錯!??!

了解響應(yīng)式

1.ref 定義數(shù)據(jù)(包括對象)時,都會變成 RefImpl(Ref 引用對象) 類的實例,無論是修改還是重新賦值都會調(diào)用 setter,都會經(jīng)過 reactive 方法處理為響應(yīng)式對象。
2.但是 reactive 定義數(shù)據(jù)(必須是對象),是直接調(diào)用 reactive 方法處理成響應(yīng)式對象。如果重新賦值,就會丟失原來響應(yīng)式對象的引用地址,變成一個新的引用地址,這個新的引用地址指向的對象是沒有經(jīng)過 reactive 方法處理的,所以是一個普通對象,而不是響應(yīng)式對象。解構(gòu)同理。

避坑辦法:

避開直接賦值和結(jié)構(gòu),reactive直接包裹一個對象。

let data=reactive({
    userData:{}        //里面定義一個對象,這樣賦值就不會丟失響應(yīng)式了。
})
 
//獲取接口數(shù)據(jù)
let res=await getUserApi();  //請求接口
data.userData=res.data;      //將返回的結(jié)果賦值給data

簡單數(shù)據(jù)類型使用ref()來進行定義。

拔高:TS對reactive里對象進行限制

上面那種情況是沒在TS限制的情況下我們解決的,但是有TS用戶就有疑問了,這樣我在reactive內(nèi)部再定義一個對象,就失去了對userData的類型限制了,怎么辦呢?

答案:寫類?。。。。。。。。。。。。。。。。。。?/p>

下面我們就來研究一下:

1.我們最開始會可能這樣對data加上類型限制:

interface dataRule{
    name:string,
    age:number
}
//定義數(shù)據(jù)
let data:dataRule=reactive({
    name:"",
    age:""
})
//但是,當獲取接口的時候
let res=await getUserApi();  //請求接口
//data=res.data;              //我們已經(jīng)知道不能這樣寫了,會丟失響應(yīng)式。(xxx達咩)
//2.這時聰明的你可能會這樣
data.name=res.data.name;
data.age=res.data.age;
//PS:
//問題一:賦值太麻煩
//這樣確實可以不損壞響應(yīng)式,但是如果我說你這里面不僅僅有name和age呢,而是有很多很多,那咋辦?
//問題二:無法對userData做類型限制
//你可能又想這樣:
let data=reactive({
     userData:{}  
})
這樣寫,我們怎么能對userData做類型限制呢?

實現(xiàn):分開寫類?。。。。。。。。。?!(重點來啦)

1.單獨拿出來一個ts文件,比如user.ts

//1.定義限制userData的接口
export interface dataRule{
    name:string,
    age:number
}
//寫類
export class data{
    //定義userData并且做TS限制和賦初始值
    userData:dataRule={
        name:"",
        age:""
    }
}

在對應(yīng)的.vue文件中引入該類。

//1.引入剛寫好ts類文件
import {dataRule,data} from "@/type/user.ts"
//2.重點來了,我實例化出來data,然后用一個變量User接收。
let User=reactive(new data());
/*
//實例化出來以后相當于這樣的結(jié)構(gòu):
User={
    userData:{
        name:"",
        age:""
    }
}
*/
//3.我們調(diào)用接口
//獲取接口數(shù)據(jù)
let res=await getUserApi();  //請求接口
User.userData=res.data;      //將返回的結(jié)果賦值給data,這樣也不會丟失響應(yīng)式,并且userData也受了TS的限制。

結(jié)語:

到此這篇關(guān)于Vue3中reactive丟失響應(yīng)式問題解決的文章就介紹到這了,更多相關(guān)Vue3 reactive丟失響應(yīng)式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue實現(xiàn)前后端完全分離的項目實戰(zhàn)

    Vue實現(xiàn)前后端完全分離的項目實戰(zhàn)

    本文主要介紹了Vue實現(xiàn)前后端完全分離的項目實戰(zhàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • vue指令防止按鈕連點解析

    vue指令防止按鈕連點解析

    這篇文章主要介紹了vue指令防止按鈕連點解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • 基于vue如何發(fā)布一個npm包的方法步驟

    基于vue如何發(fā)布一個npm包的方法步驟

    這篇文章主要介紹了基于vue如何發(fā)布一個npm包的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • vue實現(xiàn)移動端拖動排序

    vue實現(xiàn)移動端拖動排序

    這篇文章主要為大家詳細介紹了vue實現(xiàn)移動端拖動排序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • vue-cli腳手架-bulid下的配置文件

    vue-cli腳手架-bulid下的配置文件

    這篇文章主要介紹了vue-cli腳手架-bulid下的配置文件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • Vue包大小優(yōu)化的實現(xiàn)(從1.72M到94K)

    Vue包大小優(yōu)化的實現(xiàn)(從1.72M到94K)

    這篇文章主要介紹了Vue包大小優(yōu)化的實現(xiàn)(從1.72M到94K),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Vue添加請求攔截器及vue-resource 攔截器使用

    Vue添加請求攔截器及vue-resource 攔截器使用

    這篇文章主要介紹了Vue添加請求攔截器及vue-resource 攔截器使用,需要的朋友可以參考下
    2017-11-11
  • vue2.6.10+vite2開啟template模板動態(tài)編譯的過程

    vue2.6.10+vite2開啟template模板動態(tài)編譯的過程

    這篇文章主要介紹了vue2.6.10+vite2開啟template模板動態(tài)編譯,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-02-02
  • vue面試created中兩次數(shù)據(jù)修改會觸發(fā)幾次頁面更新詳解

    vue面試created中兩次數(shù)據(jù)修改會觸發(fā)幾次頁面更新詳解

    這篇文章主要為大家介紹了vue面試created中兩次數(shù)據(jù)修改會觸發(fā)幾次頁面更新問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • vue動態(tài)加載本地圖片的處理方法

    vue動態(tài)加載本地圖片的處理方法

    最近遇到了個問題,用v-bind動態(tài)綁定img的src,圖片加載不出來,所以下面這篇文章主要給大家介紹了關(guān)于vue動態(tài)加載本地圖片的相關(guān)資料,需要的朋友可以參考下
    2021-07-07

最新評論