构建一个简单的React待办事项列表应用

简介: 构建一个简单的React待办事项列表应用

在这个教程中,我们将构建一个基于React的待办事项列表应用。这个应用将允许用户添加、编辑和删除待办事项,同时还会显示已完成和未完成的待办事项。我们将使用React Hooks、组件、以及本地状态管理来构建这个应用。


  1. 设置项目

首先,使用create-react-app创建一个新的React项目:

npx create-react-app todo-app
cd todo-app


  1. 创建主要组件

src/components目录下创建TodoList.jsTodoItem.jsTodoForm.js等组件。

TodoList.js (主要组件,展示待办事项列表)

import React, { useState } from 'react';
import TodoItem from './TodoItem';
import TodoForm from './TodoForm';
function TodoList() {
  const [todos, setTodos] = useState([]);
  const handleAddTodo = (todoText) => {
    const newTodo = {
      id: Date.now(),
      text: todoText,
      completed: false,
    };
    setTodos([...todos, newTodo]);
  };
  const handleToggleTodo = (id) => {
    setTodos(todos.map((todo) => (todo.id === id ? { ...todo, completed: !todo.completed } : todo)));
  };
  const handleDeleteTodo = (id) => {
    setTodos(todos.filter((todo) => todo.id !== id));
  };
  return (
    <div className="todo-list">
      <h2>待办事项列表</h2>
      <TodoForm onAddTodo={handleAddTodo} />
      <ul>
        {todos.map((todo) => (
          <TodoItem
            key={todo.id}
            todo={todo}
            onToggleTodo={handleToggleTodo}
            onDeleteTodo={handleDeleteTodo}
          />
        ))}
      </ul>
    </div>
  );
}
export default TodoList;

TodoItem.js (待办事项组件)

import React from 'react';
function TodoItem({ todo, onToggleTodo, onDeleteTodo }) {
  return (
    <li className={`todo-item ${todo.completed ? 'completed' : ''}`}>
      <input
        type="checkbox"
        checked={todo.completed}
        onChange={() => onToggleTodo(todo.id)}
      />
      <span className="todo-text">{todo.text}</span>
      <button className="delete-btn" onClick={() => onDeleteTodo(todo.id)}>
        删除
      </button>
    </li>
  );
}
export default TodoItem;

TodoForm.js (待办事项表单组件)

import React, { useState } from 'react';
function TodoForm({ onAddTodo }) {
  const [input, setInput] = useState('');
  const handleInputChange = (e) => {
    setInput(e.target.value);
  };
  const handleSubmit = (e) => {
    e.preventDefault();
    if (input.trim()) {
      onAddTodo(input);
      setInput('');
    }
  };
  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        value={input}
        onChange={handleInputChange}
        placeholder="添加待办事项"
      />
      <button type="submit">添加</button>
    </form>
  );
}
export default TodoForm;


  1. 添加样式

src目录下创建App.css(或index.css,取决于你的项目设置),并添加以下样式:

/* App.css */
.todo-list {
  max-width: 400px;
  margin: 0 auto;
  padding: 20px;
}
.todo-list h2 {
  text-align: center;
}
.todo-list ul {
  list-style-type: none;
  padding: 0;
}
.todo-item {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-bottom: 10px;
  padding: 10px;
  border-bottom: 1px solid #ddd;
}
.todo-item.completed {
  color: #999;
  text-decoration: line-through;
}
.todo-item input[type="checkbox"] {
  margin-right: 10px;
}
.todo-item .todo-text {
  flex: 1;
}
.todo-item .delete-btn {
  margin-left: auto;
  background-color: transparent;
  border: none;
  color: #999;
  cursor: pointer;
  font-size: 0.8em;
}
.todo-item .delete-btn:hover {
  color: #666;
}
/* 样式可能需要根据具体布局和设计进行调整 */


  1. 集成到App组件

src/App.js中,我们将TodoList组件作为根组件引入并渲染。

import React from 'react';
import './App.css'; // 确保导入了样式文件
import TodoList from './components/TodoList';
function App() {
  return (
    <div className="App">
      <TodoList />
    </div>
  );
}
export default App;


  1. 启动项目

回到终端或命令提示符,运行以下命令来启动你的React应用:

npm start

现在,你的待办事项列表应用应该可以在浏览器中运行了。你可以添加新的待办事项,点击复选框来标记它们为已完成,以及点击“删除”按钮来删除待办事项。


  1. 扩展功能
  • 持久化存储:使用localStorage或IndexedDB来保存待办事项,以便在刷新页面或重新打开应用时恢复它们。
  • 拖放排序:允许用户通过拖放来重新排序待办事项。
  • 日期和时间:为每个待办事项添加截止日期或提醒时间。
  • 优先级:添加待办事项的优先级,如高、中、低。
  • 过滤:添加过滤功能,允许用户根据完成状态或优先级来查看待办事项。
  • 响应式设计:确保应用在不同设备和屏幕尺寸上都能良好地工作。


  1. 总结

在这个教程中,我们构建了一个基于React的待办事项列表应用。我们使用了React Hooks、组件、本地状态管理以及CSS样式来构建这个应用。这个应用是一个很好的起点,你可以根据自己的需求进一步扩展和定制它。React的灵活性和可扩展性使得构建复杂的前端应用变得相对简单和高效。

目录
打赏
0
0
0
0
16
分享
相关文章
使用 Node.js、Express 和 React 构建强大的 API
本文详细介绍如何使用 Node.js、Express 和 React 构建强大且动态的 API。从开发环境搭建到集成 React 前端,再到利用 APIPost 高效测试 API,适合各水平开发者。内容涵盖 Node.js 运行时、Express 框架与 React 库的基础知识及协同工作方式,还涉及数据库连接和前后端数据交互。通过实际代码示例,助你快速上手并优化应用性能。
React音频播放列表组件:常见问题、易错点与解决方案
本文介绍了在React中实现音频播放列表时常见的挑战及解决方案。通过基础实现、常见问题分析和最佳实践,帮助开发者避免状态管理、生命周期控制和事件处理中的陷阱。关键点包括使用`useRef`操作音频元素、`useState`同步播放状态、全局状态管理防止多音频同时播放、以及通过`useEffect`清理资源。还提供了代码示例和跨浏览器兼容性处理方法,确保高效实现功能并减少调试时间。
189 30
React音频播放列表组件开发实战:常见问题与避坑指南
本文介绍了构建React音频播放列表组件的核心架构与常见问题解决方案。通过管理播放状态、列表索引和音频进度,结合异步控制、状态清理、节流优化等技术,确保流畅的用户体验。针对移动端兼容性、内存泄漏、列表渲染性能等问题提供了具体修复方案,并分享了自定义Hook封装、可视化音频波形等进阶实践。最后,总结了性能优化法则和测试关键点,帮助开发者打造生产级可靠的音频播放组件。
154 18
如何在实际应用中测试和比较React和Vue的性能?
总之,通过多种方法的综合运用,可以相对客观地比较 React 和 Vue 在实际应用中的性能表现,为项目的选择和优化提供有力的依据。
229 1
使用React和Redux构建高效的前端应用
使用React和Redux构建高效的前端应用
139 2
React Native实战:构建跨平台移动应用
React Native实战:构建跨平台移动应用
148 0
从零开始构建你的第一个React应用
从零开始构建你的第一个React应用
59 0
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
如何使用组合组件和高阶组件实现复杂的 React 应用程序?
195 68
在 React 中,组合组件和高阶组件在性能方面有何区别?
在 React 中,组合组件和高阶组件在性能方面有何区别?
175 67
AI助理
登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问

你好,我是AI助理

可以解答问题、推荐解决方案等