首页 > 解决方案 > useState 将对象附加到对象数组中

问题描述

我的对象是创建一个对象数组,如下所示[{},{},{}]

状态变量构造函数如下:

this.state:{...some states,
            parsed:[{}]}

每个对象都来自IPFS带有异步功能的 get:

 IPFSREADER = element => {
  ipfs.cat(convertedIPFSaddress).then(result => {
      let cons = result.toString('utf8')
      const consdata = JSON.parse(cons);
      // NEED useState save consdata to parsed state
}

当我获取数据时,我将这些数据推送到状态useState,但我尝试如下方式:

  1. this.setState({parsed:consdata})结果:> Object:{some data...}

  2. this.setState({...[parsed],parsed:[consdata]})结果:[0:Object:{some data...}]

    • 当有来自 ipfs 的新数据时,这只会更改数组中的数据,但不会附加到先前数据的尾部。
  3. this.setState(parsed => [...data, parsed]); 按照Joseph D. 的回答,但抛出ReferenceError: can't access lexical declaration 'data' before initialization错误。试试这个解决方案改变上面的功能如下:

    • 将函数更改为异步:IPFSREADER = async element => {..
    • 在 ipfs.cat 前面添加等待:const { data } = await ipfs.cat(...

如何解决这个问题?我尝试了很多解决方案,但无法改变结果......谢谢。

标签: javascriptarraysreactjs

解决方案


看起来你正在尝试做setState({...state, parsed: [...state.parsed, consdata]})


推荐阅读