3 回答

TA貢獻(xiàn)1802條經(jīng)驗(yàn) 獲得超10個(gè)贊
在初始渲染data
過(guò)程中只是空字符串并嘗試訪問(wèn)hits[0]
is undefine 實(shí)際上 this.state.data.hits 本身是未定義的,因此您可以在訪問(wèn)它之前首先進(jìn)行檢查,如下所示
console.log( this.state.data.hits && this.state.data.hits[0])

TA貢獻(xiàn)1898條經(jīng)驗(yàn) 獲得超8個(gè)贊
問(wèn)題是您在 state 中的初始值是data: ''一個(gè)字符串值,它會(huì)在執(zhí)行時(shí)第一次渲染時(shí)拋出錯(cuò)誤this.state.data.hits[0]。
要解決此問(wèn)題,您可以將初始狀態(tài)更改為如下所示
this.state = {
input : '',
data: {
hits: []
,
isloading: true
}
建議:
您不需要綁定該方法,fetchData因?yàn)樗窃谕环秶鷥?nèi)調(diào)用的
如果您刪除此綁定,那么您甚至不需要構(gòu)造函數(shù),您可以使用以下代碼替換整個(gè)構(gòu)造函數(shù)
state = {
input : '',
data: { hits: [] },
isloading: true
}

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超5個(gè)贊
(請(qǐng)參閱下面有趣的評(píng)論,關(guān)于有條件地調(diào)用 console.log() 還是創(chuàng)建一個(gè)與您期望的數(shù)據(jù)結(jié)構(gòu)匹配的初始狀態(tài)更好。這段代碼確實(shí)有效,盡管有些人更喜歡不同的方法)。
render 方法在獲取數(shù)據(jù)之前運(yùn)行,因此此時(shí)您的數(shù)據(jù)等于一個(gè)空字符串。
您可以放置一個(gè)條件語(yǔ)句,以便它僅在數(shù)據(jù)存儲(chǔ)后執(zhí)行 console.log() :
render(){
return(
<div>
{
this.state.data && this.state.data.hits && console.log(this.state.data.hits[0])
}
</div>
);
}
如果沒(méi)有 this.state.data,代碼將不會(huì)經(jīng)過(guò)下一個(gè) && 操作符。但是您還需要檢查數(shù)據(jù)對(duì)象是否具有“hits”屬性,因此您為此編寫了另一個(gè) && 運(yùn)算符。Console.log() 不是“假的”,所以它會(huì)運(yùn)行。
添加回答
舉報(bào)