第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

從 websocket 數(shù)據(jù)源中讀取 JSON 數(shù)組

從 websocket 數(shù)據(jù)源中讀取 JSON 數(shù)組

暮色呼如 2022-01-13 10:37:35
ReactJS - TypeError:無(wú)法讀取未定義的屬性“0”this.ws.onmessage = e => {  var tbox = JSON.parse(e.data);  this.setState({  user : this.state.usernames.concat(tbox.data[0].user),  messages : this.state.messages.concat(tbox.data[0].message)})console.log(tbox.data[0].user + ': ' + tbox.data[0].html);我正在嘗試從公共 websocket api 實(shí)時(shí)解析、setState 和顯示數(shù)據(jù)(在 Ant Design List 組件中)。我設(shè)法走到了這一步,但如果有人能更好地幫助我朝著正確的方向前進(jìn),那將不勝感激!const URL = 'wss://www.bitmex.com/realtime?subscribe=chat:1'const data = [  {    user: 'buythediplosers',    message: 'im over here waiting for nothing lol',    time: '4:20 AM', /*TODO: let the user set their timezone*/  },];class Trollbox extends Component {  constructor(props) {    super(props);    this.state = {        usernames: [],        messages: [],        timestamps: [],    }  }  ws = new WebSocket(URL)  componentDidMount() {    this.ws.onopen = () => {      console.log('connected')    }  render() {    return (      <div>        <div>          <List            itemLayout="horizontal"            dataSource={data}            renderItem={item => (              <List.Item>                <List.Item.Meta                  description={                    <div>                      <p>                        <b>{item.user}</b>: {item.message} {item.time}                      </p>                    </div>                  }                />              </List.Item>            )}          />        </div>...console.log(tbox.data[0].user + ': ' + tbox.data[0].html);向我展示了我想在控制臺(tái)中看到的內(nèi)容,這對(duì)我來(lái)說(shuō)是向前邁出的一步:   console.log(this.state.usernames + ': ' + this.state.messages);不過(guò),這與上一行不同,但仍然給我一個(gè)錯(cuò)誤:
查看完整描述

2 回答

?
莫回?zé)o

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){ .....}


查看完整回答
反對(duì) 回復(fù) 2022-01-13
?
ITMISS

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超8個(gè)贊

查看您在評(píng)論中提供的圖像,這個(gè):

http://img1.sycdn.imooc.com//61df92450001429109730410.jpg

顯示您得到的前 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)。


查看完整回答
反對(duì) 回復(fù) 2022-01-13
  • 2 回答
  • 0 關(guān)注
  • 263 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)