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

如何使用Axios更新对象数组中的布尔值(React+Node.js Todo场景)

实现Todo任务状态更新的方案

后端(Node.js)改造

你当前只有创建Todo的POST接口,要修改任务状态需要新增一个更新接口(推荐用PUT,符合RESTful规范):

// 新增PUT接口,根据ID更新任务状态
app.put('/Todo/:id', function(req, res) {
  // 把URL参数里的ID转成时间戳(和你存储时的new Date()类型匹配)
  const todoId = Number(req.params.id);
  // 在lists数组中定位目标任务
  const targetTodo = lists.find(item => Number(item.id) === todoId);
  
  if (targetTodo) {
    // 直接更新status为true,也可以改成接收前端传的参数实现双向切换
    targetTodo.status = true;
    res.status(200).json(targetTodo);
  } else {
    res.status(404).json({ message: '未找到该Todo任务' });
  }
});

如果需要支持勾选/取消勾选双向切换,可以把更新逻辑改成动态接收前端传的status值:

targetTodo.status = req.body.status;

前端(React.js)实现

在Todo列表组件中,给每个复选框绑定onChange事件,触发时调用Axios发送更新请求并同步本地状态:

import axios from 'axios';
import { useState } from 'react';

function TodoList() {
  const [todos, setTodos] = useState([]); // 存储所有Todo任务的本地状态

  // 处理复选框勾选事件
  const handleTodoCheck = (todoId) => {
    axios.put(`/Todo/${todoId}`, { status: true })
      .then(response => {
        // 更新本地状态,替换已修改的任务
        setTodos(prev => prev.map(todo => 
          Number(todo.id) === Number(todoId) ? response.data : todo
        ));
      })
      .catch(err => console.error('更新状态失败:', err));
  };

  return (
    <div className="todo-list">
      {todos.map(todo => (
        <div key={todo.id} className="todo-item">
          <input
            type="checkbox"
            checked={todo.status}
            onChange={() => handleTodoCheck(todo.id)}
          />
          <span>{todo.toDo}</span>
        </div>
      ))}
    </div>
  );
}

export default TodoList;

如果要支持双向切换,修改事件处理逻辑即可:

const handleTodoCheck = (todoId, currentStatus) => {
  axios.put(`/Todo/${todoId}`, { status: !currentStatus })
    .then(response => {
      setTodos(prev => prev.map(todo => 
        Number(todo.id) === Number(todoId) ? response.data : todo
      ));
    });
};

然后在复选框的onChange中传入当前状态:

onChange={() => handleTodoCheck(todo.id, todo.status)}

补充提示

你当前用内存数组lists存储数据,服务重启后数据会丢失,若需要持久化可以改用文件存储或轻量数据库(比如SQLite、MongoDB)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:20:20