arrays - 在 React 中使用 useState 更改对象数组中的单个值
问题描述
我正在学习 React 课程,并且正在尝试围绕代码进行一些实验,以更好地理解概念。
我有一些虚拟数据:
export const data = [
{ id: 1, name: 'john' },
{ id: 2, name: 'peter' },
{ id: 3, name: 'susan' },
{ id: 4, name: 'anna' },
];
这是我的组件:
import React from "react";
import { data } from "../../../data";
const UseStateArray = () => {
const [people, setPeople] = React.useState(data);
return (
<>
{people.map((person) => {
const { id, name } = person;
return (
<div key={id} className="item">
<h4>{name}</h4>
</div>
);
})}
<button
type="button"
className="btn"
onClick={() => setPeople([])}
>
Clear Items
</button>
</>
);
};
export default UseStateArray;
该按钮在单击时有一个事件处理程序,它使用空数组调用 setPeople(以便删除所有元素)。
我试图更改此类按钮的功能,尝试通过以下方式更改对象(数据)数组的第一个元素的名称:
onClick={() => setPeople(people[0].name = 'Frank')}
这样做会得到一个错误,即:“TypeError: people.map is not a function”。我认为原因是因为我不再返回数组,因此map
无法运行。
如何简单地更改数组中存在的对象的名称(或任何值)?
解决方案
你正在改变对象
clickHandler = () => {
const newPeople = people.map((person, index) => {
if (index === 0) {
return {
...person,
name: 'Frank'
}
}
return person;
});
setPeople(newPeople);
}
....
....
onClick={clickHandler}
推荐阅读
- tsql - 在锚点发生 X 天后重置 Row_Number
- python - Embed.set_image 不显示图像
- reactjs - 由于时间戳,当我在 firebase 上添加数据时,null 不是对象
- java - 如何使用协议缓冲区 java 流式传输大对象?
- vue.js - 在Vue循环中动态改变元素的颜色
- python - 如何在字典中获取最大值的键,如果有重复,也返回最高数字键
- laravel - Laravel 多数据查询
- java - 使用递归和回溯对给定字符串进行排列
- c++ - 如何声明一个接受层引用/指针的属性?
- 2sxc - 我无法编辑内容类型字段,错误已添加具有相同键的项目