2 回答

TA貢獻(xiàn)1865條經(jīng)驗(yàn) 獲得超7個(gè)贊
“this.ws.onmessage”處理來(lái)自另一個(gè)端點(diǎn)的每條消息,因此您必須確保您的代碼能夠處理可能發(fā)生的每種情況。
第一次沒(méi)有 tbox.data 的 json 來(lái)了,tbox.data 是未定義的,所以你有錯(cuò)誤“無(wú)法讀取未定義的屬性 '0'”。
第二次錯(cuò)誤是“無(wú)法讀取未定義的屬性'用戶'”,因此 tbox.data 未定義但 tbox.data[0] 未定義。我認(rèn)為 tbox.data 是一個(gè)空數(shù)組(數(shù)據(jù):[])。
如果要使用 tbox.data[0].user,請(qǐng)檢查 tbox.data[0] 是否未定義。
嘗試
if(tbox.data && tbox.data.length > 0){ .....}

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊
查看您在評(píng)論中提供的圖像,這個(gè):
顯示您得到的前 3 個(gè)響應(yīng)與您期望的不同,并且其中沒(méi)有名為 user 的密鑰,因此您收到該錯(cuò)誤的原因。您可以通過(guò)添加如下條件來(lái)跳過(guò)它:
if(tbox.data){
this.setState({
user : this.state.usernames.concat(tbox.data[0].user),
messages : this.state.messages.concat(tbox.data[0].message)
})
}
關(guān)于你的第二個(gè)問(wèn)題,
不過(guò),這與上一行不同,但仍然給我一個(gè)錯(cuò)誤:
這是因?yàn)槟l(fā)布的是整個(gè)this.state.usernames數(shù)組,它作為一個(gè)數(shù)組不斷變大。如果您想以這種方式發(fā)布它,您必須遍歷狀態(tài)并分別記錄每個(gè)狀態(tài)。
添加回答
舉報(bào)