最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

大錯(cuò)特錯(cuò)?。?!

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

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

大錯(cuò)特錯(cuò)?。。?/p>

了解響應(yīng)式

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

避坑辦法:

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

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

簡(jiǎn)單數(shù)據(jù)類型使用ref()來(lái)進(jìn)行定義。

拔高:TS對(duì)reactive里對(duì)象進(jìn)行限制

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

答案:寫(xiě)類!?。。。。。。。。。。。。。。。。?!

下面我們就來(lái)研究一下:

1.我們最開(kāi)始會(huì)可能這樣對(duì)data加上類型限制:

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

實(shí)現(xiàn):分開(kāi)寫(xiě)類?。。。。。。。。。?!(重點(diǎn)來(lái)啦)

1.單獨(dú)拿出來(lái)一個(gè)ts文件,比如user.ts

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

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

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

結(jié)語(yǔ):

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

相關(guān)文章

  • VUE 動(dòng)態(tài)組件的應(yīng)用案例分析

    VUE 動(dòng)態(tài)組件的應(yīng)用案例分析

    這篇文章主要介紹了VUE 動(dòng)態(tài)組件的應(yīng)用,結(jié)合具體案例形式分析了vue.js動(dòng)態(tài)組件的應(yīng)用場(chǎng)景、解決方案及相關(guān)操作技巧,需要的朋友可以參考下
    2019-12-12
  • vue3實(shí)現(xiàn)移動(dòng)端滑動(dòng)模塊

    vue3實(shí)現(xiàn)移動(dòng)端滑動(dòng)模塊

    這篇文章主要為大家詳細(xì)介紹了vue3實(shí)現(xiàn)移動(dòng)端滑動(dòng)模塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • vue移動(dòng)端html5頁(yè)面根據(jù)屏幕適配的四種解決方法

    vue移動(dòng)端html5頁(yè)面根據(jù)屏幕適配的四種解決方法

    在vue移動(dòng)端h5頁(yè)面當(dāng)中,其中適配是經(jīng)常會(huì)遇到的問(wèn)題,這塊主要有四個(gè)方法可以適用。這篇文章主要介紹了vue移動(dòng)端h5頁(yè)面根據(jù)屏幕適配的四種方案 ,需要的朋友可以參考下
    2018-10-10
  • Vue實(shí)現(xiàn)簡(jiǎn)單選項(xiàng)卡效果

    Vue實(shí)現(xiàn)簡(jiǎn)單選項(xiàng)卡效果

    這篇文章主要為大家詳細(xì)介紹了Vue實(shí)現(xiàn)簡(jiǎn)單選項(xiàng)卡效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • 在vue中使用console.log無(wú)效的解決

    在vue中使用console.log無(wú)效的解決

    這篇文章主要介紹了在vue中使用console.log無(wú)效的解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-08-08
  • vue el-date-picker 開(kāi)始日期不能大于結(jié)束日期的實(shí)現(xiàn)代碼

    vue el-date-picker 開(kāi)始日期不能大于結(jié)束日期的實(shí)現(xiàn)代碼

    這篇文章主要介紹了vue el-date-picker 開(kāi)始日期不能大于結(jié)束日期的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-01-01
  • Vue3實(shí)現(xiàn)canvas畫(huà)布組件自定義畫(huà)板實(shí)例代碼

    Vue3實(shí)現(xiàn)canvas畫(huà)布組件自定義畫(huà)板實(shí)例代碼

    Vue?Canvas是一個(gè)基于Vue.js的輕量級(jí)畫(huà)板組件,旨在提供一個(gè)簡(jiǎn)易的畫(huà)布功能,用戶可以在網(wǎng)頁(yè)上進(jìn)行自由繪圖,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-09-09
  • vue3+ts+vite中“@“路徑失效的解決辦法

    vue3+ts+vite中“@“路徑失效的解決辦法

    這篇文章主要介紹了vue3+ts+vite中“@“路徑失效的解決辦法,在使用vite腳手架生成項(xiàng)目時(shí),解決引入路徑失敗的錯(cuò)誤,可以按照本文介紹的步驟操作,需要的朋友可以參考下
    2024-11-11
  • 前端低代碼form-generator實(shí)現(xiàn)及新增自定義組件詳解

    前端低代碼form-generator實(shí)現(xiàn)及新增自定義組件詳解

    這篇文章主要給大家介紹了關(guān)于前端低代碼form-generator實(shí)現(xiàn)及新增自定義組件的相關(guān)資料,form-generator是一個(gè)開(kāi)源的表單生成器,可以幫助我們快速構(gòu)建各種表單頁(yè)面,需要的朋友可以參考下
    2023-11-11
  • vue組件強(qiáng)制刷新的4種方案

    vue組件強(qiáng)制刷新的4種方案

    在開(kāi)發(fā)過(guò)程中,有時(shí)候會(huì)遇到這么一種情況,通過(guò)動(dòng)態(tài)的賦值,但是dom沒(méi)有及時(shí)更新,能夠獲取到動(dòng)態(tài)賦的值,但是無(wú)法獲取到雙向綁定的dom節(jié)點(diǎn),這就需要我們手動(dòng)進(jìn)行強(qiáng)制刷新組件,下面這篇文章主要給大家介紹了關(guān)于vue組件強(qiáng)制刷新的4種方案,需要的朋友可以參考下
    2023-05-05

最新評(píng)論

兖州市| 巴彦县| 怀柔区| 黔江区| 堆龙德庆县| 巴中市| 汉川市| 东兴市| 建水县| 邵阳县| 阳信县| 咸丰县| 醴陵市| 北票市| 凌云县| 聊城市| 白河县| 湖南省| 张掖市| 沂源县| 天气| 竹溪县| 历史| 海口市| 游戏| 辉南县| 佛冈县| 固始县| 朝阳市| 吴旗县| 翁牛特旗| 陆川县| 沐川县| 环江| 卓资县| 海伦市| 郓城县| 百色市| 柳江县| 阜康市| 贵定县|