You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Redux触发TODO_DONE后todo的done字段仍为false如何解决

问题原因

核心不匹配问题:
你的reducer中TODO_DONE分支期望action.payload是待办项的id值,判断逻辑为todo.id === action.payload。但你在组件调用doneTodo时传入的是整个todo对象,导致判断永远为false,不会触发任何todo项的done字段更新。

修复方案

二选一即可,推荐第一种符合通用开发规范:

  1. 调整组件传参,仅传入待办项id
    修改按钮点击逻辑:
<button onClick={() => doneTodo(todo.id)}>Done</button>
  1. 调整reducer匹配逻辑,适配传入整个todo的写法
    修改reducer判断条件:
case "TODO_DONE":
  return state.map((todo) => {
    if (todo.id === action.payload.id) {
      return {
        ...todo,
        done: true,
      };
    }
    return todo;
  });

额外优化点

你的TodoList组件参数写法存在多余项:const TodoList = ({ todoss, deleteTodoAction, doneTodo }, props),函数式组件仅第一个参数为props对象,你已经完成了解构,第二个props参数无任何作用可直接删除。


内容的提问来源于stack exchange,提问作者learningbtw

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:24:08