先贴上报错信息方便他人查找:
[Vue warn]: Error in render: “TypeError: Cannot read property ‘0’ of undefined” found in
当我看到这个问题的时候真的是无从下手,这是什么错?虽然报错了但是页面却也正常的渲染出来了,什么鬼?~~~
后来在网上查了之后才明白,原来是父组件给子组件传递的初始值是异步获取的,也就是说子组件获取到父组件传过来的值的时候,其实这个值是未定义(undefined)的,而获取到值之后就更新了子组件中的数据,这就是子组件报错却又能渲染出页面的原因
既然原因找到了,那么接下来就说一下解决的方法
在网上找了找,基本上解决的方法就两种
- 在子组件中通过
watch
监听要传递的值,并通过v-if
进行判断该值是否存在,不存在就不会渲染,也就不会报错了,等到数据已经加载出来也就能正常渲染了(注意:如果watch监听的数据不是基本类型,而是对象、数组,需要进行深度监听)- 通过vuex进行管理,当然,这种方式适用于多个页面都用到该数据的情况,不然就有点浪费了
- 深度监听某一属性的方法