Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 小型项目:待办事项应用(React基础功能的综合应用)

小型项目:待办事项应用(React基础功能的综合应用)

在本项目中,我们将创建一个简单的待办事项应用,这是一个常见的任务管理工具,可以帮助用户添加、删除、标记任务完成等。这个项目将展示如何使用 React 的基础功能,帮助你加深对 React 核心概念的理解。


1. 项目简介

这个待办事项应用的基本功能包括:

  • 添加新的待办事项
  • 标记待办事项为已完成
  • 删除待办事项
  • 按照完成状态进行筛选(显示所有、只显示未完成、只显示已完成)

2. 项目结构

我们将项目结构保持简单,主要有以下几个部分:

  • App.js:主应用组件,负责整体布局和功能控制。
  • TodoItem.js:表示每个待办事项的组件。
  • TodoList.js:管理待办事项列表的容器组件。
  • AddTodo.js:用于添加新待办事项的表单组件。
src/ 
├── components/ 
│ ├── AddTodo.js // 添加待办事项表单 
│ ├── TodoItem.js // 单个待办事项组件 
│ └── TodoList.js // 待办事项列表容器 
├── App.js // 主应用组件 
└── index.js // 入口文件

3. 创建 Todo 应用

3.1 App.js 主应用组件

在 App.js 中,我们将管理待办事项的状态,并传递给其他组件。

import React, { useState } from 'react';
import TodoList from './components/TodoList';
import AddTodo from './components/AddTodo';

function App() {
  const [todos, setTodos] = useState([]);
  const [filter, setFilter] = useState('all'); // 用于筛选待办事项

  const addTodo = (todoText) => {
    const newTodo = {
      id: Date.now(),
      text: todoText,
      completed: false,
    };
    setTodos([...todos, newTodo]);
  };

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

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

  const filteredTodos = todos.filter(todo => {
    if (filter === 'completed') return todo.completed;
    if (filter === 'incomplete') return !todo.completed;
    return true; // 'all'状态
  });

  return (
    <div className="App">
      <h1>待办事项</h1>
      <AddTodo addTodo={addTodo} />
      <div>
        <button onClick={() => setFilter('all')}>全部</button>
        <button onClick={() => setFilter('completed')}>已完成</button>
        <button onClick={() => setFilter('incomplete')}>未完成</button>
      </div>
      <TodoList
        todos={filteredTodos}
        toggleTodo={toggleTodo}
        deleteTodo={deleteTodo}
      />
    </div>
  );
}

export default App;

3.2 TodoList.js 待办事项列表组件

TodoList.js 用于展示所有待办事项,并允许用户标记完成或删除任务。

import React from 'react';
import TodoItem from './TodoItem';

function TodoList({ todos, toggleTodo, deleteTodo }) {
  return (
    <ul>
      {todos.map(todo => (
        <TodoItem
          key={todo.id}
          todo={todo}
          toggleTodo={toggleTodo}
          deleteTodo={deleteTodo}
        />
      ))}
    </ul>
  );
}

export default TodoList;

3.4 AddTodo.js 添加待办事项表单组件

AddTodo.js 负责展示添加新待办事项的表单,并处理表单提交。

import React, { useState } from 'react';

function AddTodo({ addTodo }) {
  const [input, setInput] = useState('');

  const handleSubmit = (e) => {
    e.preventDefault();
    if (input.trim()) {
      addTodo(input);
      setInput('');
    }
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        value={input}
        onChange={(e) => setInput(e.target.value)}
        placeholder="添加新的待办事项"
      />
      <button type="submit">添加</button>
    </form>
  );
}

export default AddTodo;

4. 样式和优化

4.1 基本样式

为使应用更具可用性,我们可以为不同的组件添加一些基本样式。以下是一些简单的 CSS 样式:

.App {
  width: 400px;
  margin: 0 auto;
  padding: 20px;
  background-color: #f9f9f9;
  border-radius: 8px;
}

ul {
  list-style-type: none;
  padding: 0;
}

li {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 8px;
  border-bottom: 1px solid #ddd;
}

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

button {
  background-color: #e74c3c;
  color: white;
  border: none;
  padding: 5px 10px;
  cursor: pointer;
  border-radius: 5px;
}

button:hover {
  background-color: #c0392b;
}

4.2 提高用户体验

  • 添加输入验证:确保用户输入非空内容。
  • 使用本地存储:将待办事项存储在浏览器的本地存储中,确保刷新后数据不丢失。
  • 动画效果:为添加和删除待办事项添加简单的过渡动画。

5. 总结

通过这个小型待办事项应用,我们实现了以下 React 核心概念:

  • 状态管理:通过 useState 管理待办事项的状态。
  • 事件处理:处理用户交互(如添加、删除、标记完成等)。
  • 组件结构:分离不同功能的组件,增强代码的复用性。
  • 条件渲染:根据任务状态显示不同样式或内容。

这个项目展示了 React 的基本使用,适合作为初学者的综合实践。

Last Updated:: 12/13/24, 11:37 AM