vue3的reactive賦值問題解決
問題
vue3中直接對reactive聲明的變量本身進(jìn)行賦值是無效的。
篩選表單重置功能
// 數(shù)據(jù)結(jié)構(gòu) let filterForm = reactive({ createDate: null, q: null })
起初我的做法是直接給filterForm變量賦值。
function reset() { filterForm = { createDate: null, q: null } }
寫完之后發(fā)現(xiàn)無效,便改成了單個數(shù)據(jù)置空,此時生效了。
function reset() { filterForm.createDate = null filterForm.q = null }
彈窗數(shù)據(jù)回顯
const props = defineProps({ visible: { type: Boolean, default: false }, data: { type: Object, default: {} } }) let visible = ref(false) let modalData = reactive({})
我的邏輯:監(jiān)聽visible變量,如果彈窗顯示,則將數(shù)據(jù)回顯。
我的做法是:把props.data結(jié)構(gòu)賦值給modalData變量,結(jié)果沒有生效,我用vue插件查看,插件顯示modalData變量是一個空對象。
用console.log打印,發(fā)現(xiàn)數(shù)據(jù)是有值的。
watch{ () => props.visible, (val) => { if(val) { modalData = { ...props.data } } visible = val } }
查了下資料,發(fā)現(xiàn)直接給reactive聲明的變量本身賦值是沒有效果的。
于是我便給modalData里面又嵌套了一層data。
let modalData = reactive({ data: {} }) watch{ () => props.visible, (val) => { if(val) { modalData.data = { ...props.data } } visible = val } }
解決方案
單個賦值
let formData = reactive({ updateDate: null }) formData.updateDate = '2023-7-10' function reset() { formData.updateDate = null }
多嵌套一層
const props = defineProps({ data:{ type: Object, default: {} } }) const modalData = reactive({ data:{} }) modalData.data = { ...props.data }
補(bǔ)充
在查閱資源時,發(fā)現(xiàn)reavtive聲明的數(shù)組變量,賦值時也同樣有問題。
如果需要清空數(shù)組,不能直接賦值一個空數(shù)組,而是要將數(shù)組長度設(shè)置為 0。
let arr = reactive([]) // 錯誤寫法 arr = [] // 正確寫法 arr.length = 0
到此這篇關(guān)于vue3的reactive賦值問題解決的文章就介紹到這了,更多相關(guān)vue3 reactive賦值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
策略模式實現(xiàn) Vue 動態(tài)表單驗證的方法
策略模式(Strategy Pattern)又稱政策模式,其定義一系列的算法,把它們一個個封裝起來,并且使它們可以互相替換。封裝的策略算法一般是獨(dú)立的,策略模式根據(jù)輸入來調(diào)整采用哪個算法。這篇文章主要介紹了策略模式實現(xiàn) Vue 動態(tài)表單驗證,需要的朋友可以參考下2019-09-09詳解如何使用 vue-cli 開發(fā)多頁應(yīng)用
本篇文章主要介紹了詳解如何使用 vue-cli 開發(fā)多頁應(yīng)用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12如何使用 vxe-table 實現(xiàn)左邊是樹右邊是表格聯(lián)動功能
使用 vxe-table 來實現(xiàn)左邊是樹,右邊是表格聯(lián)動功能,當(dāng)需要實現(xiàn)左右兩側(cè)聯(lián)動時,表格 vxe-grid 配合分割模板 vxe-split 就很容易實現(xiàn)了,下面通過實例代碼給大家介紹使用 vxe-table 來實現(xiàn)左邊是樹,右邊是表格聯(lián)動功能,感興趣的朋友一起看看吧2025-03-03elementui使用el-upload組件實現(xiàn)自定義上傳的詳細(xì)步驟
upload上傳是前端開發(fā)很常用的一個功能,在Vue開發(fā)中常用的Element組件庫也提供了非常好用的upload組件,這篇文章主要給大家介紹了關(guān)于elementui使用el-upload組件實現(xiàn)自定義上傳的詳細(xì)步驟,需要的朋友可以參考下2023-12-12詳解用webpack2.0構(gòu)建vue2.0超詳細(xì)精簡版
本篇文章主要介紹了詳解用webpack2.0構(gòu)建vue2.0超詳細(xì)精簡版,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-04-04在elementui中Notification組件添加點擊事件實例
這篇文章主要介紹了在elementui中Notification組件添加點擊事件實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11