javascript - 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
,但我尝试如下方式:
this.setState({parsed:consdata})
结果:> Object:{some data...}
this.setState({...[parsed],parsed:[consdata]})
结果:[0:Object:{some data...}]
- 当有来自 ipfs 的新数据时,这只会更改数组中的数据,但不会附加到先前数据的尾部。
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(...
- 将函数更改为异步:
如何解决这个问题?我尝试了很多解决方案,但无法改变结果......谢谢。
解决方案
看起来你正在尝试做setState({...state, parsed: [...state.parsed, consdata]})
推荐阅读
- spring-integration - 集群应用程序 - 一次只有一台服务器从 kafka 读取,我错过了什么?
- html - 为什么即使我根本没有触摸该配置,我的视频也不会在 Safari 上播放任何声音?
- highcharts - 在 Ionic 4 中使用 css 自定义 highcharts
- linux - 如何仅打印存在相同文件名的文件夹名称
- python - 如何根据python字典的键和值有条件地将数据添加到Excel文件中的列中,同时保持其他列一致
- mysql - 如何创建获取值表单表并更新不同表的触发器
- r - 如何在开发的图形用户界面 (GUI) 中显示“R 控制台内容”
- ruby-on-rails - 选择字段以在更新时创建或更新 has_many 记录
- java - 如何解决此问题:尝试在空对象引用上调用虚拟方法 'android.text.Editable android.widget.EditText.getText()'
- qt - 在 qtcreator 调试器中发送 gdb 命令