javascript - 如何将新项目添加到对象数组
问题描述
const data = [
{
title: 'Todo',
items: ['do home work', 'complete study'],
},
{
title: 'In-Progress',
items: ['learn tailwind', 'build some projects'],
},
{
title: 'Completed',
items: ['completed work'],
},
];
const [list, setList] = useState(data);
const [text, setText] = useState('');
每次添加项目时,此 addItem 函数都会添加一个新的 Todo 副本。如何在不添加新副本的情况下将项目添加到待办事项
const addItem = () => {
setList((prev) => {
return [
(prev[0] = {
...prev[0],
items: [text, ...prev[0].items],
}),
...prev,
];
});
setText('');
};
解决方案
这是一些有问题的设计选择,因为您假设您的 todos 对象始终是数组 ( prev[0]
) 中的第一项,但直截了当是:
const addItem = () => {
setList((prev) => {
const [todoData, ...rest] = prev;
return [{ ...todoData, items: [...todoData.items, text] }, ...rest];
});
setText("");
};
推荐阅读
- java - 在 java 中抑制 SSL 证书验证会导致 502 无法连接。与 curl(带 -k 选项)和 Postman(禁用 SSL)完美配合)
- javascript - 为什么有时文件读取器 onload 不起作用?
- java - 无法启动活动 ComponentInfo NPE
- c# - 带空格的 StringFormat
- java - 无法通过 JAXB maven 插件生成类
- c++ - 如何解决打印节点和边缘增强图形库中的此错误?
- sql-server - Invoke-DbaQuery 失败 - 无法打开登录请求的数据库“”
- sql - Oracle SQL 子查询
- java - maven 未经代理授权
- php - 搜索用 htaccess 替换查询字符串