vue3中reactive不能直接賦值的解決方案
vue3 reactive不能直接賦值
最近比較忙,都沒什么時間學(xué)習(xí)了。
在vue3里,ref和reacitve都可以定義響應(yīng)式數(shù)據(jù),但是兩者有所不同。在使用reactive定義復(fù)雜結(jié)構(gòu)的響應(yīng)式數(shù)據(jù)時,如果你要對其賦值,會丟失其響應(yīng)性。然后賦值是我們經(jīng)常進行的操作,那么該怎么解決呢?
方法
1. 改為ref定義
const arr= ref([]) arr.value = [1, 2, 3]
2. push新增數(shù)據(jù)
const arr = reactive([]) arr.push(...[1, 2, 3])
3.再封裝一層數(shù)據(jù)(推薦?。?/p>
const state = reactive({ ? arr: [] }); state.arr = [1, 2, 3]
但是這樣的話在html模板里,使用數(shù)據(jù)就得state.arr
所以我們可以用解構(gòu)將它return出來
但是reactive解構(gòu)出來的數(shù)據(jù)會丟失響應(yīng)性
所以再用torefs()方法為它們添加響應(yīng)性
最終為:
const state = reactive({ ? arr: [] }); state.arr = [1, 2, 3] return{ ? ...toRefs(state), }
vue3 reactive賦值不響應(yīng)
看了好多方法,先都存著。
(1)多嵌套一層
setup(props) { ?? ?//a賦值的時候多套一層對象值賦到a的屬性a上 ? let a=reactive({a:{id:1,name:'小明'}}) ?? ? Object ? function fn(){ ? //改值時就可以直接給a.a賦值了 ? ? a.a={id:2,name:'小黃'} ? ? console.log(a); ? ? ? } ? return { ? ? fn,a ? } }
(2)使用ref
const data= ref([])? data.value = [1, 2, 3]
(3)用obeject.assign
?let a=reactive({id:1,name:'小明'}) ?? ? ?function fn(){ ? Object.assign(a,{id:2,name:'大明'}) ? ?}
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue項目下npm或yarn下安裝echarts多個版本方式
這篇文章主要介紹了vue項目下npm或yarn下安裝echarts多個版本方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06解決vue prop傳值default屬性如何使用,為何不生效的問題
這篇文章主要介紹了解決vue prop傳值default屬性如何使用,為何不生效的問題。具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09v-slot和slot、slot-scope之間相互替換實例
這篇文章主要介紹了v-slot和slot、slot-scope之間相互替換實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09Vue學(xué)習(xí)筆記進階篇之函數(shù)化組件解析
本篇文章主要介紹了Vue學(xué)習(xí)筆記進階篇之函數(shù)化組件探究,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07