reactjs - ReactJS setState 与对象和数组
问题描述
我想在数组方面有一个数据结构,例如
data[0]
title:"ABC"
photo: "./123.jpg"
summ: "text text test"
data[1]
title:"ABCD"
photo: "./1234.jpg"
summ: "text texwt test"
我曾尝试像这样设置状态,但它不起作用。请指导我;(
this.setState({
data:{
title: [ ...this.state.data.title, title ],
photo: [ ...this.state.data.photo, photo ],
summ: [ ...this.state.data.summ, summ ]
}
});
Uncaught (in promise) TypeError: _this.state.data.concat is not a function
///// 错误没有初始化我的状态
// this is incorrect
this.state={
data:{
title:null,
photo:null,
summ:null,
}
//The correct version is
this.state={
data:[],
解决方案
您的解决方案不起作用的原因是您试图将对象分配给数组。
我不确定您是要尝试将项目添加到数组还是更改数组中的单个项目。如果你想添加,你可以这样做:
this.setState({
...this.state.data, {title, photo, summ}
})
但是,如果您尝试更改数组中的项目。您应该存储在一个临时变量中,然后像这样分配它。
const tempArray = this.state.data;
this.setState({
data: tempArray.filter(//some change function)
})
如果您尝试将数据初始化为状态,则可以这样做:
import JsonData from "./myJsonData"
constructor(props) {
super(props);
this.searchBarRef = React.createRef();
this.state = {
data: JsonData
};
}
希望这可以解决您的问题。如果我不能清楚地解释,请说,所以我可以尝试对您的问题给出更好的答案。
推荐阅读
- angular - Angular - cookie 的使用
- c++ - std::vector 和其他中两种形式的初始值设定项列表的等价性
- winapi - 从 Direct2D 中的 C 宏获取虚假返回值
- android - 如何使特定版本的 Android 应用程序不可用?
- javascript - 使用 getValue 和数组值位置 (GAS) 在变量中获取值有什么区别?
- html - 我想更改在我的字段中输入的文本的颜色
- ios - 安装 Cocoapods gem 时如何修复 FilePermissions 错误
- bash - 如何在命令中使用“not in” - bash
- python - xmltodict: 解析引发 ValueError('Document 必须只有一个根。') - Python 3
- c# - 按 C# 中数据表中的计数分组