构建一个简单的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的灵活性和可扩展性使得构建复杂的前端应用变得相对简单和高效。

目录
相关文章
|
1月前
|
前端开发
深入解析React Hooks:构建高效且可维护的前端应用
本文将带你走进React Hooks的世界,探索这一革新特性如何改变我们构建React组件的方式。通过分析Hooks的核心概念、使用方法和最佳实践,文章旨在帮助你充分利用Hooks来提高开发效率,编写更简洁、更可维护的前端代码。我们将通过实际代码示例,深入了解useState、useEffect等常用Hooks的内部工作原理,并探讨如何自定义Hooks以复用逻辑。
|
4天前
|
前端开发 JavaScript 开发者
从零开始构建你的第一个React应用
从零开始构建你的第一个React应用
13 2
|
19天前
|
资源调度 前端开发 数据可视化
构建高效的数据可视化仪表板:D3.js与React的融合之道
【10月更文挑战第25天】在数据驱动的时代,将复杂的数据集转换为直观、互动式的可视化表示已成为一项至关重要的技能。本文深入探讨了如何结合D3.js的强大可视化功能和React框架的响应式特性来构建高效、动态的数据可视化仪表板。文章首先介绍了D3.js和React的基础知识,然后通过一个实际的项目案例,详细阐述了如何将两者结合使用,并提供了实用的代码示例。无论你是数据科学家、前端开发者还是可视化爱好者,这篇文章都将为你提供宝贵的洞见和实用技能。
42 5
|
17天前
|
监控 前端开发 JavaScript
确保 React 应用在出现错误时仍然能够保持响应式
【10月更文挑战第25天】可以有效地确保React应用在出现错误时仍然能够保持响应式,为用户提供更加稳定、可靠的使用体验。在实际应用中,需要根据项目的具体情况和需求,综合运用这些方法,并不断优化和完善错误处理机制,以适应不断变化的业务场景和用户需求
|
24天前
|
前端开发 JavaScript 测试技术
React 高阶组件 (HOC) 应用
【10月更文挑战第16天】高阶组件(HOC)是 React 中一种复用组件逻辑的方式,通过接受一个组件并返回新组件来实现。本文介绍了 HOC 的基础概念、核心功能和常见问题,包括静态方法丢失、ref 丢失、多个 HOC 组合和 props 冲突的解决方案,并提供了具体的 React 代码示例。通过本文,读者可以更好地理解和应用 HOC,提高代码的复用性和可维护性。
54 8
|
1月前
|
前端开发 JavaScript UED
构建现代Web应用:使用React框架打造单页面应用
【10月更文挑战第9天】构建现代Web应用:使用React框架打造单页面应用
|
1月前
|
前端开发 JavaScript 测试技术
构建响应式Web应用程序:React实战指南
【10月更文挑战第9天】构建响应式Web应用程序:React实战指南
|
1月前
|
前端开发 JavaScript 开发者
深入理解React Hooks:提升前端开发效率的关键
【10月更文挑战第5天】深入理解React Hooks:提升前端开发效率的关键
|
12天前
|
前端开发 JavaScript 开发者
颠覆传统:React框架如何引领前端开发的革命性变革
【10月更文挑战第32天】本文以问答形式探讨了React框架的特性和应用。React是一款由Facebook推出的JavaScript库,以其虚拟DOM机制和组件化设计,成为构建高性能单页面应用的理想选择。文章介绍了如何开始一个React项目、组件化思想的体现、性能优化方法、表单处理及路由实现等内容,帮助开发者更好地理解和使用React。
40 9
|
1月前
|
前端开发 JavaScript API
探索React Hooks:前端开发的革命性工具
【10月更文挑战第5天】探索React Hooks:前端开发的革命性工具