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

如何在ReactJS中结合localStorage实现待办事项列表管理

在ReactJS中使用localStorage管理待办事项列表

核心实现代码

import React, { useState, useEffect } from 'react';

const TodoList = () => {
    const [todos, setTodos] = useState(JSON.parse(localStorage.getItem('todos')) || []);
    const [newTodo, setNewTodo] = useState('');

    const addTodo = () => {
        if (newTodo.trim() !== '') {
            setTodos([...todos, { id: Date.now(), text: newTodo, completed: false }]);
            setNewTodo('');
        }
    };

    const deleteTodo = (id) => {
        setTodos(todos.filter((todo) => todo.id !== id));
    };

    const updateTodo = (id) => {
        setTodos(
            todos.map((todo) =>
                todo.id === id ? { ...todo, completed: !todo.completed } : todo
            )
        );
    };

    useEffect(() => {
        localStorage.setItem('todos', JSON.stringify(todos));
    }, [todos]);

    return (
        <div>
            <h2>Todo List</h2>
            <ul>
                {todos.map((todo) => (
                    <li key={todo.id}>
                        <input
                            type="checkbox"
                            checked={todo.completed}
                            onChange={() => updateTodo(todo.id)}
                        />
                        <span style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>
                            {todo.text}
                        </span>
                        <button onClick={() => deleteTodo(todo.id)}>Delete</button>
                    </li>
                ))}
            </ul>
            <div>
                <input
                    type="text"
                    value={newTodo}
                    onChange={(e) => setNewTodo(e.target.value)}
                />
                <button onClick={addTodo}>Add Todo</button>
            </div>
        </div>
    );
};

export default TodoList;

操作与效果说明

  • 尝试操作:在输入框输入"整理桌面""提交周报"这类待办内容,点击"Add Todo"添加;点击待办项前的复选框切换完成状态;点击"Delete"按钮删除对应待办;完成操作后刷新页面。
  • 预期效果:添加的待办实时显示在列表中,勾选后文字显示删除线,删除后待办从列表移除;刷新页面后,所有之前的待办数据(包括完成状态)都能完整保留,不会丢失。
  • 实际运行结果:所有操作均按预期执行,列表实时响应操作变化,localStorage会自动同步更新后的待办数据;刷新页面后,待办列表完全恢复,各项状态与操作前一致,成功实现了数据持久化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 04:44:51