首页 > 解决方案 > React Hooks State 只更新一次 Type:error not a function

问题描述

我附上了我的代码和我得到的错误的屏幕截图。

这是概述;我是使用钩子的新手,我试图让我的待办事项列表复选框保存在状态中,选中时等于 true,未选中时为 false。第一次单击复选框起作用并更新状态,但随后每次尝试选中或取消选中一个框都会导致TypeError:prevState.map 不是函数(参见图 2)。

1 image 1:选中该框,它工作正常并更新状态。

2图像 2:尝试再次单击复选框导致地图错误。

3图 3:主应用程序代码。

4图 4:待办事项列表组件代码。

我对为什么我的代码不起作用感到困惑,并寻求帮助以解决此错误。

谢谢你。

标签: reactjsreact-hooks

解决方案


当您将函数传递给 时setList,您始终将状态的最新值作为第一个参数。在您第一次使用它之后,您将返回一个 object { updatedTodos }。您应该返回数组updatedTodos。在这种情况下,您甚至不需要声明变量,只需使用短箭头返回:

setList(prevState => prevState.map(todo => {
    if (todo.id === id) {
        return {...todo, completed: !todo.completed}
    }
    return todo
}))

推荐阅读