vue父組件值變化但子組件不刷新的三種解決方案
父組件傳遞給子組件的數(shù)據(jù),如果是一個(gè)復(fù)雜對(duì)象(例如一個(gè)數(shù)組或?qū)ο螅敲醋咏M件只會(huì)監(jiān)聽對(duì)象的引用而不是對(duì)象的內(nèi)容。這意味著當(dāng)對(duì)象的內(nèi)容發(fā)生變化時(shí),子組件不會(huì)更新。
解決:
1、子組件使用 watch 監(jiān)聽
在子組件使用 watch 監(jiān)聽 props傳過(guò)來(lái)的值,如果發(fā)現(xiàn)改變,調(diào)用forceUpdate刷新視圖。
this.$forceUpdate()
2、父組件聲明布爾變量
父組件中聲明一個(gè)布爾變量,數(shù)據(jù)發(fā)生變化后,切換一下變量狀態(tài),可刷新子組件視圖。
3、調(diào)用splice方法
數(shù)據(jù)發(fā)生變化后,在下面調(diào)用一下splice方法修改原數(shù)組長(zhǎng)度(索引、截取長(zhǎng)度都為0),數(shù)組不變,但視圖可成功渲染。
推薦使用這種方案
this.list.splice(0, 0)
4.使用this.$set
一、對(duì)象 使用this.$set(),修改和新增
定義數(shù)據(jù)對(duì)象: obj: { name: "小明", age: 18, }, 基本語(yǔ)法: this.$set(需要改變的對(duì)象,"需要改變的對(duì)象屬性","新值")
1、對(duì)象修改
this.$set(this.obj, "name", "小劉");
控制臺(tái)輸出:obj: { name: "小劉", age: 18, },
2.對(duì)象新增
this.$set(this.obj, "hobby", "study");
控制臺(tái)輸出:obj: { name: "小明", age: 18, hobby: "study"},
3.對(duì)象新增未知屬性(這里的item是傳遞的參數(shù),不帶引號(hào),"reading"是參數(shù)值)
二、數(shù)組 使用this.$set(),修改和新增
定義數(shù)組包對(duì)象: arr: [ { name: "小王", age: 18 }, { name: "小張", age: 20 }, ], 定義普通數(shù)組: twoArr: [11, 22, 33, ], 基本語(yǔ)法: this.$set(需要修改的數(shù)組,需要修改的數(shù)組下標(biāo),{ "要修改的數(shù)組對(duì)象,一個(gè)/多個(gè)" })
1.數(shù)組修改
修改數(shù)組對(duì)象:
this.$set(this.arr, 1, { name: "小王", age: 19 });
控制臺(tái)輸出:arr: [ { name: "小王", age: 18 },{ name: "小王", age: 19 }, ],
修改普通數(shù)組:
this.$set(this.twoArr, 0, 99);
控制臺(tái)輸出:twoArr: [99, 22, 33, ],
2.數(shù)組新增
首先需要獲取新增的數(shù)組長(zhǎng)度:
let reslg = this.arr.length; this.$set(this.arr, reslg,{ name: "小紫", age: 18 },); 控制臺(tái)輸出: arr: [ { name: "小王", age: 18 }, { name: "小張", age: 20 }, { name: "小紫", age: 18 }, ],
三、同理,執(zhí)行刪除操作時(shí),對(duì)象或數(shù)組不更新時(shí)可以使用this.$delete
this.$delete 也是一個(gè)實(shí)例方法,用于從響應(yīng)式對(duì)象中刪除屬性,并確保該操作也是響應(yīng)式的。
使用this.$delete 可以解決Vue響應(yīng)式系統(tǒng)的另一個(gè)限制,即無(wú)法檢測(cè)到通過(guò)索引直接刪除數(shù)組元素的變化。通過(guò)this.$delete 方法,可以顯式地告訴Vue,某個(gè)屬性已經(jīng)被刪除,從而觸發(fā)視圖的更新。
基本語(yǔ)法: this.$delete(this.obj, "name")
以上就是vue父組件值變化但子組件不刷新的三種解決方案的詳細(xì)內(nèi)容,更多關(guān)于vue子組件不刷新的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- vue 父組件獲取子組件里面的data數(shù)據(jù)(實(shí)現(xiàn)步驟)
- Vue子組件如何修改父組件數(shù)據(jù)的方法及注意事項(xiàng)
- vue3父子組件通信之子組件修改父組件傳過(guò)來(lái)的值
- Vue3子組件向父組件傳值的兩種實(shí)現(xiàn)方式
- Vue子組件調(diào)用父組件事件的3種方法實(shí)例
- vue中父組件通過(guò)props向子組件傳遞數(shù)據(jù)但子組件接收不到解決辦法
- vue子組件實(shí)時(shí)獲取父組件的數(shù)據(jù)實(shí)現(xiàn)
- 關(guān)于VUE點(diǎn)擊父組件按鈕跳轉(zhuǎn)到子組件的問(wèn)題及解決方案
相關(guān)文章
ElementUI?select彈窗在特定場(chǎng)合錯(cuò)位問(wèn)題解決方案
這篇文章主要介紹了ElementUI?select彈窗在特定場(chǎng)合錯(cuò)位問(wèn)題解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-01-01Vue2學(xué)習(xí)筆記之請(qǐng)求數(shù)據(jù)交互vue-resource
本篇文章主要介紹了Vue2學(xué)習(xí)筆記之?dāng)?shù)據(jù)交互vue-resource ,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-02-02VUE引入騰訊地圖并實(shí)現(xiàn)軌跡動(dòng)畫的詳細(xì)步驟
這篇文章主要介紹了VUE引入騰訊地圖并實(shí)現(xiàn)軌跡動(dòng)畫,引入步驟大概是在 html 中通過(guò)引入 script 標(biāo)簽加載API服務(wù),結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09vue 獲取到數(shù)據(jù)但卻渲染不到頁(yè)面上的解決方法
這篇文章主要介紹了vue 獲取到數(shù)據(jù)但卻渲染不到頁(yè)面上的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11uniapp微信小程序使用webview嵌套u(yù)niappH5并實(shí)現(xiàn)通信詳細(xì)步驟
在開發(fā)微信小程序的時(shí)候,我們有時(shí)候會(huì)遇到將H5頁(yè)面嵌入到小程序頁(yè)面中的情況,這篇文章主要給大家介紹了關(guān)于uniapp微信小程序使用webview嵌套u(yù)niappH5并實(shí)現(xiàn)通信的詳細(xì)步驟,需要的朋友可以參考下2024-05-05Vue elementui字體圖標(biāo)顯示問(wèn)題解決方案
這篇文章主要介紹了Vue elementui字體圖標(biāo)顯示問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08element plus tree拖動(dòng)節(jié)點(diǎn)交換位置和改變層級(jí)問(wèn)題(解決方案)
圖層list里有各種組件,用element plus的tree來(lái)渲染,可以把圖片等組件到面板里,面板是容器,非容器組件,比如圖片、文本等,就不能讓其他組件拖進(jìn)來(lái),這篇文章主要介紹了element plus tree拖動(dòng)節(jié)點(diǎn)交換位置和改變層級(jí)問(wèn)題(解決方案),需要的朋友可以參考下2024-04-04