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

React函数组件中如何更新todo对象数组的completed属性?

React函数组件更新todo指定项completed属性的实现方案

核心逻辑说明

  • 不要直接操作导入的静态todo数组,需要将整个todo列表托管到React状态中,所有数据变更通过状态更新完成
  • 不要共用单个isChecked状态,每个todo项的选中状态要和自身的completed属性绑定
  • 状态更新要遵循不可变原则,不直接修改原状态对象/数组,生成新的数组后传入setter方法

完整实现代码

// 首先导入依赖的hook
import { useState } from 'react'
import ToDoData from "./data/tododata";

// React组件名必须大写开头
const MyComp = () => {
  // 将整个todo数组托管为状态
  const [todos, setTodos] = useState(ToDoData);

  // 接收要更新的todo的id作为参数
  const handleChange = (todoId) => {
    setTodos(prevTodos => {
      // 遍历原todo数组,匹配到对应id的项时更新completed属性,其余项保持不变
      return prevTodos.map(todo => {
        if (todo.id === todoId) {
          // 生成新的对象,不修改原对象
          return { ...todo, completed: true }
        }
        return todo
      })
    })
  };

  return (
    // 遍历所有todo项渲染对应的复选框
    <div>
      {todos.map(todo => (
        <div key={todo.id}>
          <input
            type="checkbox"
            checked={todo.completed}
            // 绑定当前todo的id到点击事件
            onChange={() => handleChange(todo.id)}
          />
          <span>{todo.task}</span>
        </div>
      ))}
    </div>
  )
}

export default MyComp

额外说明

你提供的原始todo数据源末尾缺失数组闭合符],如果导入时报错可以补全后再使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 02:03:04