Reactjs React Hooks状态仅更新一次类型:错误不是函数

Reactjs React Hooks状态仅更新一次类型:错误不是函数,reactjs,react-hooks,Reactjs,React Hooks,我附上了我的代码和错误的屏幕截图 这里是概述;我不熟悉使用钩子,我正在尝试让我的待办事项列表复选框在选中时保存为true,在未选中时保存为false。第一次单击复选框会在状态下工作并更新,但随后每次尝试选中或取消选中复选框都会导致类型错误:prevState.map不是一个函数(参见图2) 图1:选中该框,它可以正常工作并更新状态 图2:再次尝试单击复选框导致映射错误 图3:主应用程序代码 图4:待办事项列表组件代码 我不明白为什么我的代码不能工作,我请求帮助修复这个错误 谢谢。当您将函数传递给

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

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

图1:选中该框,它可以正常工作并更新状态

图2:再次尝试单击复选框导致映射错误

图3:主应用程序代码

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

我不明白为什么我的代码不能工作,我请求帮助修复这个错误


谢谢。

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

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

请以文本形式发布代码。如果可能,在codesandbox或另一个在线沙盒上放一个最小的示例。似乎从“./todosData.js”导入的不是数组。