vue里面的data为什么需要初始化?

比如我这样写:

方式一: {
           data:() => { return {arr: []} }
        }
方式二:  {
           data:() => { return {arr: null} }
        }
我在钩子函数created中,请求数据,然后赋给this.arr这个属性,
用方式一没有问题,可是换到方式二,就会报错,然后当数据请求
完成以后页面也会正常渲染,也就是说在数据还没请求完成并赋值
给this.arr之前会报错。
(注意:我在模板里面用到了arr这个属性)
阅读 5.2k
3 个回答

可能是你有组件绑定了arr,并且以报错的方式来处理null,如果只是Vue的话,我没有复现这个问题


2018年8月13日14:26:42,发现问题被补充

那我再补充一点。

clipboard.png
根据vue实例的生命周期,Created虽然是在模板渲染之前的,但是异步操作不会阻塞生命周期。

也就是说,虽然请求数据是在Created里面,但是实例模板渲染完成之前,数据还没有拿到。
那么模板里的arr依然还是null,使用的时候就会报错。

Vue里面没有阻塞实例生命周期的方法,如果你用了Vue-router,可以用beforeRouterEnter这个hook拿数据,然后再跳转

报错 报的什么错?

模板里用到了这个数组,值又被修改为null,肯定会报错的。
好比你用原生JS写了如下代码,原生JS也会报错呀

let arr = null
arr.forEach(e=>console.log(e))

如果你只是想让这个数组为空用来测试,要写成arr:[],官方文档也有提到过

clipboard.png
https://cn.vuejs.org/v2/guide...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题