提出问题:父组件用props方式给子组件传递数据,子组件中mouthed钩子函数中是否能取到props接收的数据?
回答问题:不一定。分两种情况:
1.如果父组件传的值是静态的,则在子组件的钩子函数中是可以拿到的。
2.如果父组件传的值是动态的,则在子组件的钩子函数中是可以拿不到的。
提出问题:大多数我们传的值都是动态的(api请求过来的数据),该怎么解决这个问题那?
解决问题:在子组件中用watch配置项监听传过来的数据。
//父组件
<div>
<children :datas='childreninfo'></children>
</div>
<script>
export default {
data(){
return {
childreninfo:null
}
},
async mouthed(){
//请求了某api(这里就用api....代表了请求的代码,res是返回的数据)
let res = await api........;
this.childreninfo = res;
}
}
</script>
//子组件
<script>
export default {
//接收父组件传来的数据
props:['childreninfo'],
mouthed(){
console.log(this.childreninfo) //拿到的是空数据。
},
watch:{
childreninfo(newval,oldval){
console.log(newval) //这样才可拿到父组件传来的数据
}
}
}
</script>
为什么动态数据子组件通过普通方法拿不到?因为可能api请求时间很长,还没来得急返回数据,父子模板就渲染完了。所以拿不到数据。
听懂掌声!!!