React第一次渲染為何容易出現TypeError: Cannot read property 'XX' of undefined
- 2019 年 11 月 15 日
- 筆記
此題可能大家會不屑一顧,哎,錯誤都給你懟臉上了你還不會嘛,其實大家有沒有認真思考過這其中的原因。先上一張錯誤圖,剩餘的全靠編。沒興趣看圖的老鐵們可以拉到最底下直接看結論
錯誤:
代碼:
其次,我再把簡化後的代碼拉出來遛一遛(可以先跳過圖片,去看結論)
奇怪之處:
在作者那行會拋出一開始截圖上的錯誤,注釋掉這一行,其餘的都能正常運行
原因:
首先我們注意一下 this.state.detail,默認值給的是空字符串。
為什麼我要特意說明空字符串呢
大家注意一下下面的代碼
上面這張圖就是精髓。
this.state.detail.title 第一次渲染實際上訪問的是”.title,返回undefined,所以渲染到頁面上的是字符串undefined
但是this.state.detail.author.loginname則不同,this.state.detail.author已經是undefined,即相當於undefined.loginname,拋出TypeError錯誤
結論:
訪問空字符串上的屬性會返回undefined
訪問undefined上的屬性會拋出TypeError錯誤
訪問null上不存在的屬性會破除TypeError錯誤
要注意從”,null,undefined上獲取屬性時會產生什麼樣的結果,防止出現不受控制的結果
解決:
在使用屬性前做好兼容,防止拋出錯誤直接卡死頁面
例如:this.state.detail.author.loginname 我們可以改為 this.state.detail.author&&this.state.detail.author.loginname