鍍金池/ 問答/HTML/ vue里面的data為什么需要初始化?

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

比如我這樣寫:

方式一: {
           data:() => { return {arr: []} }
        }
方式二:  {
           data:() => { return {arr: null} }
        }
我在鉤子函數(shù)created中,請求數(shù)據(jù),然后賦給this.arr這個(gè)屬性,
用方式一沒有問題,可是換到方式二,就會(huì)報(bào)錯(cuò),然后當(dāng)數(shù)據(jù)請求
完成以后頁面也會(huì)正常渲染,也就是說在數(shù)據(jù)還沒請求完成并賦值
給this.arr之前會(huì)報(bào)錯(cuò)。
(注意:我在模板里面用到了arr這個(gè)屬性)
回答
編輯回答
愚念

可能是你有組件綁定了arr,并且以報(bào)錯(cuò)的方式來處理null,如果只是Vue的話,我沒有復(fù)現(xiàn)這個(gè)問題


2018年8月13日14:26:42,發(fā)現(xiàn)問題被補(bǔ)充

那我再補(bǔ)充一點(diǎn)。

clipboard.png
根據(jù)vue實(shí)例的生命周期,Created雖然是在模板渲染之前的,但是異步操作不會(huì)阻塞生命周期。

也就是說,雖然請求數(shù)據(jù)是在Created里面,但是實(shí)例模板渲染完成之前,數(shù)據(jù)還沒有拿到。
那么模板里的arr依然還是null,使用的時(shí)候就會(huì)報(bào)錯(cuò)。

Vue里面沒有阻塞實(shí)例生命周期的方法,如果你用了Vue-router,可以用beforeRouterEnter這個(gè)hook拿數(shù)據(jù),然后再跳轉(zhuǎn)

2017年11月20日 22:45
編輯回答
尋仙

報(bào)錯(cuò) 報(bào)的什么錯(cuò)?

2017年9月29日 02:50
編輯回答
避風(fēng)港

模板里用到了這個(gè)數(shù)組,值又被修改為null,肯定會(huì)報(bào)錯(cuò)的。
好比你用原生JS寫了如下代碼,原生JS也會(huì)報(bào)錯(cuò)呀

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

如果你只是想讓這個(gè)數(shù)組為空用來測試,要寫成arr:[],官方文檔也有提到過

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

2018年3月6日 22:22