React实现个人待办事项列表:添加、编辑和删除功能全解析 | 豆包MarsCode AI刷题

77 阅读3分钟

React实现个人待办事项列表:添加、编辑和删除功能全解析

引言

在忙碌的日常生活中,有效地管理待办事项是提高生产力的关键。今天,我将带你一起构建一个简单的个人待办事项列表应用,使用React框架实现添加、编辑和删除待办事项的基本功能。这个项目不仅能够帮助你理解React的基本操作,还能够让你对状态管理有一个初步的认识。

项目概览

我们的待办事项列表应用将包括以下功能:

  • 添加待办事项:用户可以在文本框中输入待办事项,并将其添加到列表中。
  • 标记完成:用户可以标记某个待办事项为完成状态。
  • 编辑待办事项:用户可以编辑已存在的待办事项。
  • 删除待办事项:用户可以删除不再需要的待办事项。

技术栈

  • React:一个用于构建用户界面的JavaScript库,特别适合构建单页应用。
  • JavaScript:用于编写React组件的脚本语言。
  • CSS(可选):用于美化我们的待办事项列表。

实现步骤

1. 创建React应用

首先,你需要创建一个新的React应用。如果你已经安装了Node.js和npm,可以通过以下命令快速开始:

npx create-react-app todo-app
cd todo-app
npm start

2. 编写TodoApp组件

我们将创建一个TodoApp组件,它将包含应用的主要逻辑和UI。

import React, { useState } from 'react';

const TodoApp = () => {
  const [todos, setTodos] = useState([]);
  const [editingId, setEditingId] = useState(null);
  const [newTodo, setNewTodo] = useState('');

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

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

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

  const editTodo = (id) => {
    setEditingId(id);
  };

  const saveEdit = (id, newText) => {
    setTodos(
      todos.map((todo) =>
        todo.id === id ? { ...todo, text: newText } : todo
      )
    );
    setEditingId(null);
  };

  return (
    <div>
      <h1>Todo List</h1>
      <input
        type="text"
        value={newTodo}
        onChange={(e) => setNewTodo(e.target.value)}
        onKeyPress={(e) => {
          if (e.key === 'Enter') addTodo();
        }}
      />
      <button onClick={addTodo}>Add Todo</button>
      <ul>
        {todos.map((todo) => (
          <li key={todo.id}>
            <input
              type="checkbox"
              checked={todo.completed}
              onChange={() => toggleTodo(todo.id)}
            />
            {editingId === todo.id ? (
              <input
                type="text"
                value={todo.text}
                onChange={(e) => saveEdit(todo.id, e.target.value)}
                onBlur={() => setEditingId(null)}
              />
            ) : (
              <span onDoubleClick={() => editTodo(todo.id)}>
                {todo.text}
              </span>
            )}
            <button onClick={() => deleteTodo(todo.id)}>Delete</button>
          </li>
        ))}
      </ul>
    </div>
  );
};

export default TodoApp;

3. 样式和用户体验

为了使待办事项列表更加美观,我们可以添加一些CSS样式。这将涉及到对输入框、按钮和列表项的样式调整。

input[type='text'] {
  margin: 10px;
  padding: 5px;
  font-size: 16px;
}

button {
  margin: 5px;
  padding: 5px 10px;
  font-size: 16px;
}

li {
  list-style: none;
  margin: 5px 0;
}

li input[type='checkbox'] {
  margin-right: 10px;
}

4. 进一步的功能扩展

  • 持久化存储:使用localStorage或后端数据库保存待办事项,以便在刷新页面后仍然保留。
  • 过滤功能:添加按钮或下拉菜单来过滤显示已完成或未完成的待办事项。
  • 优先级标记:允许用户为待办事项设置优先级,并根据优先级排序。

结语

通过这个简单的待办事项列表应用,我们不仅学习了如何使用React来构建交互式的用户界面,还对状态管理有了初步的了解。这个项目是一个很好的起点,你可以在此基础上继续扩展和完善,添加更多实用的功能,使其成为一个强大的个人生产力工具。

希望你喜欢这个教程,如果你有任何问题或想要进一步讨论,欢迎在评论区留言。让我们一起构建更好的Web应用!