亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

TypeError:prevState.blockHash 不可迭代

TypeError:prevState.blockHash 不可迭代

紅顏莎娜 2022-07-01 16:55:40
我試圖更新存儲在數組中的對象。但得到 TypeError: prevState.blockHash 是不可迭代的。這是我的構造函數constructor(props) {  super(props)  this.state = {    dir:"",    account: '',    name: [],    fido: [{      logIndex: [],      transactionIndex: [],      transactionHash: [],      blockHash: []    }],    loading: true  }我以這種方式設置狀態-showusingBot= () => {  this.setState(this.initialState)  this.state.instance.events.Artworkcreated({    filter: { purchased: false},    fromBlock: 0  }).on('data', event => {    this.setState(prevState =>({      fido:[...prevState.fido.map({blockHash: [        ...prevState.blockHash,           event.blockHash              ]} )]}));    })  }我在控制臺上的 ABI 響應如下。{logIndex: 0, transactionIndex: 0, transactionHash: "0x94f6d8671988ceb8ef1da862257637a198f4afefc3aef6cf3eb992dfcafb0eb1", blockHash: "0xd26937f8535a335663c9af57335f7cc783aba0e9e376408cbb92c1b3f1b28166", blockNumber: 20, …}logIndex: 0transactionIndex: 0transactionHash: "0x94f6d8671988ceb8ef1da862257637a198f4afefc3aef6cf3eb992dfcafb0eb1"blockHash: "0xd26937f8535a335663c9af57335f7cc783aba0e9e376408cbb92c1b3f1b28166"blockNumber: 20address: "0x20B40e09b75a21E0B857F695dE5De92a5A5b5AD0"type: "mined"id: "log_0d967aac"returnValues: Result0: "1"1: "bhavin"2: "masterpiece"3: "1000000000000000000"4: "100"5: "200"6: "blah blah blah!!"7: "0x04f78093E2a1C07BF6c4527Aaa00807d3132A1Df"8: falseid: "1"Artistname: "bhavin"Artname: "masterpiece"price: "1000000000000000000"width: "100"height: "200"Description: "blah blah blah!!"owner: "0x04f78093E2a1C07BF6c4527Aaa00807d3132A1Df"purchased: false__proto__: Objectevent: "Artworkcreated"signature: "0xf912339172a3b7eda9cb10ecdef181d10a74fc4411fe5d7e62f550ef3698d845"raw: {data: "0x000000000000000000000000000000000000000000000000…16820626c6168212100000000000000000000000000000000", topics: Array(4)}__proto__: Object我需要將一個字符串推送到數組blockHash。
查看完整描述

2 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

您的整個 fido 地圖回調不正確,它應該采用一個函數,您正在傳遞一個對象。


this.setState(prevState =>({

  fido:[...prevState.fido.map({blockHash: [

    ...prevState.blockHash,   

    event.blockHash        

  ]} )]}));

})

正確的語法是map((current, index, originalArray) => {...}).


但我認為你不需要映射任何東西,我認為你只需要傳播之前狀態的 fido 數組并添加新元素


this.setState(prevState =>({

  fido:[...prevState.fido, event.blockHash]

}));

編輯 1


正如您所說,由于fido是靜態的,因此我建議將其屬性存儲在一個對象中,就像您當前將其作為數組中的一個元素一樣。


this.state = {

  dir:"",

  account: '',

  name: [],

  fido: {

    logIndex: [],

    transactionIndex: [],

    transactionHash: [],

    blockHash: []

  },

  loading: true

}

現在,當更新 fido 狀態時,在之前的狀態和帶有新元素的blockHash數組中傳播


this.setState(prevState =>({

  fido: {

    ...prevState.fido,

    blockHash: [...prevState.fido.blockHash, event.blockHash]

  },

}));

OFC,如果您想要/需要保持原樣,您需要正確訪問該元素


this.setState(prevState =>({

  fido: [{

    ...prevState.fido[0],

    blockHash: [...prevState.fido[0].blockHash, event.blockHash]

  }],

}));


查看完整回答
反對 回復 2022-07-01
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

blockHash不存在于狀態中,它只存在于 的對象中state.fido。在您的情況setState下,您需要blockHash從每個元素訪問,fido而不是從整體狀態訪問它。



查看完整回答
反對 回復 2022-07-01
  • 2 回答
  • 0 關注
  • 132 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號