reactjs - 在 ReactJS 中的数组状态中添加到数组
问题描述
我正在尝试添加功能以添加到以下状态中的状态,更具体地说是“列表”:
shoeList : [
{name: 'Nike',
list : [
{type: 'boots', revenue: '1000000', gender: 'mens', price: '49.99', id: 3},
{type: 'shoes', revenue: '13280100', gender: 'womens', price: '99.99', id: 2}
]
}
],
现在我有一个组件,它显示一个表单,供用户输入收入性别和价格类型的新值。
这是组件的代码(不包括表单和文本输入 html):
state = {
}
//when changes occur in text input fields
handleChange = (e) => {
this.setState({
[e.target.id]: e.target.value
})
}
handleSubmit = (e) => {
e.preventDefault();
this.props.addShoe(this.state);
在根组件中我有 addShoe 功能:
addShoe = (shoe) => {
shoe.list.id = Math.random();
//returns a new array so no alteration of original array
let shoeList = [...this.state.shoeList, shoe];
this.setState({
shoeList: shoeList
})
}
尝试此代码给我一个错误,说 shoe.list.id 未定义?此外,我认为我缺少一些要添加到组件文件中的内容,特别是在状态中。还有什么方法可以直接访问像 this.state.shoeList.list 这样的列表?我不确定是否必须将列表添加到 shoeList。任何帮助都会非常感谢
解决方案
在您的示例中,如果打算将项目添加到具体的Nike
list
:
addShoe = (shoe) => {
this.setState({
// return an altered copy of the array via map
shoeList: this.state.shoeList.map(brandItem => {
if (brandItem.name === 'Nike') {
return {
// use spread syntax for other object properties to persist
...brandItem,
list: [
// use spread syntax to keep the original items in the list
...brandItem.list,
{
// assuming shoe is an object without an id property
...shoe,
id: Math.random()
}
]
}
} else {
return brandItem;
}
})
}
推荐阅读
- asp.net-mvc - 如何删除远程地址中显示的服务器 IP?
- swiftui - 当内容适合滚动视图边界时,SwiftUI ScrollView 不会使内容居中
- java - 尝试将google or-tools与spring一起使用时出现UnsatisfiedLinkError
- python - 如何在 Jenkins 中设置环境变量
- python - 无法导入 python 模块。安装了 pip3 和 python 3.5 和 python3.7
- javascript - 如何通过 Javascript 中的唯一属性对数组中的对象进行分组?
- django - 在 django 中编辑表单集
- sql - CTE进入无限循环?
- amazon-web-services - java 名为“corretto8”的未知运行时版本。此构建映像具有以下版本:openjdk11、openjdk8
- c# - 如何使用 EF Core 和 .Net Core 3.1 使用 Mac 设置 SQL Server 的连接字符串