定义子组件,在使用子组件时,向子组件传递数组类型的参数,子组件接收到数组之后对数据进行渲染。
而父组件的数值是不断变化的,点击按钮一次,获取一次值。
当数组不为空时,正常渲染,但是数组为空时,会保留上一次渲染。
问题刚遇到的时候,在网上看了很多文章,自己也做了很多尝试。
一、尝试一
- 1.在父组件添加v-if判断,当数组为空时,不进行子组件的渲染。
虽然这个方式可以解决问题,但是在项目中大量使用了该组件,那就需要在使用子组件的时候大量的添加判断,这种做法直接pass。
二、尝试二
- 2.在子组件中添加监听,大家可以看看这个大佬的博客—>vue中父组件传值给子组件,父组件值改变,子组件不能重新渲染,写的很好,但是对我不适用。
在监听的时候可以打出从父组件传递过来的值,并且是实时更新的,但是就是不能渲染,无解。
三、尝试三
- 3.在子组件渲染之前添加v-if判断,有值渲染,无值不渲染。不成功。
四、尝试四
- 4.想到了在vue生命周期中,子组件销毁,但是DOM元素还会继续存在,data数据以及事件绑定等已经失效。感觉这是一个思路,所以对子组件进行重新渲染,尝试文章链接如下:Vue在父组件中重新渲染子组件,不适用,无解。
五、最终
- 5.修改子组件接收值时的方式,就直接成功了。。。。如下:
props:{
modalFileArr:{
type:Array,
defaul:()=> []
},
fileObj:{
type:Object,
default:()=>{
return {}
}
},
},
解决问题之后,想知道为什么,于是去官方文档寻找答案:只是知道此方式是给传入数据添加了类型检查与附带默认值
,但是对于我这个问题没有太多的原理解答,下一步会继续关注这个问题,同时也会即使更新,如果有大佬知道为什么,希望告知。
六、忠告
在父子组件传值中,在子组件中建议使用props是对象形式的接参方式,专业可以避免很多不必要的麻烦。