此问题在此处已有答案:
How do I update states onChange
in an array of object in React Hooks(13个答案)
10小时前关闭。
我需要根据对象的“todoId”在“todo”元素中进行更改。我该怎么做?例如,如果我只想更改具有“todoId”= 1的对象的“todo”数组。
const [todoList, setTodoList] = useState([
{
todoId: 0,
todoName: "Personal",
todo: []
},
{
todoId: 1,
todoName: "Work",
todo: []
},
{
todoId: 2,
todoName: "College",
todo: []
},
])
字符串
5条答案
按热度按时间axzmvihb1#
您可以创建一个函数来接收todoId和todo数据。并且如果找到了todo,则更新todo数组。
字符串
z5btuh9x2#
下面是一个示例,说明如何从各种待办事项列表中添加和删除项目。
在设置状态时,需要使用函数回调版本。只需克隆列表,找到您想要添加(或删除)的列表,然后返回修改后的克隆。当点击一个按钮时,DOM会被查询数据属性,以识别您正在修改的列表或项目。
**注意:**在下面的例子中,我只是在添加新项目时设置了时间戳。您可以对此进行修改,以显示一个对话框,您可以在其中输入todo项的文本。
另外,避免使用
0
作为ID。在大多数语言中,zero可能意味着:false、unknown、null、nil、unset或undefined。最好从1
开始。nbysray53#
下面是一个基于您的数据的扩展示例。关键部分在
handleClick
中。在从下拉列表中选择了该部分后,在输入框中输入了todo,并单击了按钮......我们更新
setTodoList
的状态,方法是取前一个状态并Map到它上面。如果区段名称等于select
状态的值,我们spread将现有的区段对象转换为一个新对象(无变异!)。我们将部分的todos数组扩展到一个新数组中,添加一个带有id的新todo(基于todo数组的当前长度)。最后返回更新后的section对象。如果section名称和select值不匹配,我们返回section对象,不做任何更改。(Note,对于本例,我已经更改了数据中的属性键名称,使其更有意义。)
k5ifujac4#
您需要基本上重新创建整个数组。
字符串
r6vfmomb5#
从
useState
钩子返回的updater函数(在本例中为setTodoList
)可以与以下任一项一起使用:setTodoList([])
将其设置为空数组)回调接受一个
prevState
参数,它只是前一个状态值。然后回调应该返回一个新的状态值。这对于数组状态变量非常有效,因为你通常会想从数组中添加/更改/删除一个项目。
这里有一些你可以尝试:
字符串
或作为一行程序(功能等同):
型
它们都可以这样使用:
型