Vue子組件props從父組件接收數(shù)據(jù)并存入data
經(jīng)過測(cè)試父組件中傳遞過來的數(shù)據(jù)有以下特點(diǎn):
1.不允許直接修改
如果直接使用 this.xxx = action 操作的話 控制臺(tái)會(huì)報(bào)下面這個(gè)錯(cuò)誤

大概的意思是 你小子不要隨便劈我瓜,我父組件的瓜豈是你能變的,父組件重新渲染時(shí),這個(gè)值會(huì)被覆蓋,你小子自個(gè)兒用計(jì)算屬性或者data存一下吧
2.存在異步的情況
假如父組件該數(shù)據(jù)是后臺(tái)接口獲取的數(shù)據(jù),那么會(huì)產(chǎn)生這種情況。子組件的生命周期都已經(jīng)走完了,父組件的數(shù)據(jù)還沒傳過來。因?yàn)閂8引擎的運(yùn)行速度是很快的,萬分之一毫秒都等不了,如果是異步的話,子組件里是沒有辦法操作這個(gè)數(shù)據(jù)的。
父組件
<template>
<div>
<children :father="father"></children>
</div>
</template>
<script>
import children from "./children";
export default {
components: { children },
data() {
return {
father: null
};
},
mounted() {
setTimeout(() => {
this.father = { name: "父親" };
}, 1000);
},
methods: {}
};
</script>子組件
<template>
<div></div>
</template>
<script>
export default {
data() {
return {
student: {
name: "張三"
}
};
},
props: {
father: {
type: Object,
default: () => {}
}
},
watch: {
father: {
handler(newVal) {
this.fatherData =newVal
console.log(this.fatherData);
},
deep: true,
immediate: true
}
},
created() {},
mounted() {
console.log(this.father);
},
methods: {}
};
</script>解決思路
第一步
在父組件中使用子組件時(shí),為子組件加上v-if='flag',初始賦值為flag=false,等待異步賦值操作完成后修改flag=true,這個(gè)操作不單單只試用于異步情況,建議只要涉及到數(shù)據(jù)流的操作與加工,都加上v-if限制,保證數(shù)據(jù)獲取到之后再開始運(yùn)作子組件的生命周期。
//也可以這樣,簡(jiǎn)潔一些
<div>
<children v-if="father" :father="father"></children>
</div>第二步
在子組件中對(duì)props進(jìn)行watch監(jiān)聽,變化后立刻將newVal賦值到data中并保存起來
watch: {
father: {
handler(newVal) {
this.fatherData =newVal
console.log(this.fatherData);
},
deep: true,
immediate: true
}
},這里還會(huì)出現(xiàn)一種額外的情況,就是watch中可以賦值到,也能打印出具體的值出來,但是一到其他生命周期中使用確是空,這個(gè)情況
這種情況可能是對(duì)象共享地址,或者數(shù)據(jù)正處于處理中,應(yīng)當(dāng)自行進(jìn)行深克隆一份進(jìn)行傳遞,一般只要方法寫得比較健壯,此種情況基本不會(huì)出現(xiàn)
到此這篇關(guān)于Vue子組件props從父組件接收數(shù)據(jù)并存入data的文章就介紹到這了,更多相關(guān)Vue props內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
利用nodeJS+vue圖片上傳實(shí)現(xiàn)更新頭像的過程
Vue是一套構(gòu)建用戶界面的框架,最近工作中遇到了一個(gè)需求,需要做一個(gè)更新頭像的通能,下面這篇文章主要給大家介紹了關(guān)于利用nodeJS+vue圖片上傳的相關(guān)資料,需要的朋友可以參考下2022-04-04
詳解如何從零開始搭建Express+Vue開發(fā)環(huán)境
這篇文章主要介紹了詳解如何從零開始搭建Express+Vue開發(fā)環(huán)境,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
vue.js動(dòng)畫中的js鉤子函數(shù)的實(shí)現(xiàn)
這篇文章主要介紹了vue.js動(dòng)畫中的js鉤子函數(shù)的實(shí)現(xiàn),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-07-07
使用vue3.2實(shí)現(xiàn)多頁(yè)簽導(dǎo)航
這篇文章主要為大家詳細(xì)介紹了如何使用vue3.2 + elementPlus + pinia 實(shí)現(xiàn)多頁(yè)簽導(dǎo)航,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2023-12-12
vue element實(shí)現(xiàn)多個(gè)Formt表單同時(shí)驗(yàn)證
這篇文章主要介紹了vue element實(shí)現(xiàn)多個(gè)Formt表單同時(shí)驗(yàn)證方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Vue數(shù)據(jù)驅(qū)動(dòng)模擬實(shí)現(xiàn)4
這篇文章主要介紹了Vue數(shù)據(jù)驅(qū)動(dòng)模擬實(shí)現(xiàn)的相關(guān)資料,介紹了Array的變異方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01

