当前位置:首页 > React

react实现todolist

2026-01-26 12:42:09React

实现React TodoList的基本步骤

创建React TodoList需要理解组件结构、状态管理和用户交互逻辑。以下是实现一个基础TodoList的详细方法。

初始化React项目

使用Create React App或Vite初始化项目。以Create React App为例,运行以下命令:

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

创建核心组件结构

设计两个主要组件:TodoList(父组件)和TodoItem(子项)。在src目录下创建对应文件。

状态管理

TodoList.js中使用useState管理任务列表和输入框内容:

import React, { useState } from 'react';

function TodoList() {
  const [todos, setTodos] = useState([]);
  const [inputValue, setInputValue] = useState('');
}

处理用户输入

添加输入框和按钮的交互逻辑:

const handleInputChange = (e) => {
  setInputValue(e.target.value);
};

const handleAddTodo = () => {
  if (inputValue.trim()) {
    setTodos([...todos, { text: inputValue, completed: false }]);
    setInputValue('');
  }
};

渲染任务列表

映射todos数组生成任务项,并添加删除和完成状态切换功能:

const handleDelete = (index) => {
  const newTodos = todos.filter((_, i) => i !== index);
  setTodos(newTodos);
};

const handleToggleComplete = (index) => {
  const newTodos = todos.map((todo, i) => 
    i === index ? { ...todo, completed: !todo.completed } : todo
  );
  setTodos(newTodos);
};

完整组件代码示例

TodoList.js完整实现:

import React, { useState } from 'react';

function TodoList() {
  const [todos, setTodos] = useState([]);
  const [inputValue, setInputValue] = useState('');

  const handleInputChange = (e) => {
    setInputValue(e.target.value);
  };

  const handleAddTodo = () => {
    if (inputValue.trim()) {
      setTodos([...todos, { text: inputValue, completed: false }]);
      setInputValue('');
    }
  };

  const handleDelete = (index) => {
    const newTodos = todos.filter((_, i) => i !== index);
    setTodos(newTodos);
  };

  const handleToggleComplete = (index) => {
    const newTodos = todos.map((todo, i) => 
      i === index ? { ...todo, completed: !todo.completed } : todo
    );
    setTodos(newTodos);
  };

  return (
    <div>
      <h1>Todo List</h1>
      <input 
        type="text" 
        value={inputValue} 
        onChange={handleInputChange} 
        placeholder="Add new task" 
      />
      <button onClick={handleAddTodo}>Add</button>
      <ul>
        {todos.map((todo, index) => (
          <li key={index} style={{ textDecoration: todo.completed ? 'line-through' : 'none' }}>
            {todo.text}
            <button onClick={() => handleToggleComplete(index)}>
              {todo.completed ? 'Undo' : 'Complete'}
            </button>
            <button onClick={() => handleDelete(index)}>Delete</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default TodoList;

样式优化

添加基础CSS增强视觉效果。在App.css中添加:

.todo-item {
  margin: 5px 0;
  padding: 5px;
  display: flex;
  align-items: center;
}

.todo-text {
  flex-grow: 1;
  margin: 0 10px;
}

button {
  margin-left: 5px;
  cursor: pointer;
}

功能扩展建议

  • 使用localStorage持久化存储任务数据
  • 添加任务分类或标签功能
  • 实现拖拽排序任务项
  • 添加任务优先级标记
  • 使用Context API或Redux管理全局状态

以上实现提供了React TodoList的核心功能,可根据需求进一步扩展和完善。

react实现todolist

标签: reacttodolist
分享给朋友:

相关文章

react如何取消渲染

react如何取消渲染

取消渲染的方法 在React中,取消渲染通常指的是在某些条件下阻止组件渲染或中断正在进行的渲染过程。以下是几种常见的方法: 条件渲染 通过条件判断决定是否渲染组件或部分内容。可以使用if语句或三元运…

react moment如何使用

react moment如何使用

安装 react-moment 通过 npm 或 yarn 安装 react-moment: npm install react-moment 或 yarn add react-moment…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏…

react如何卸载

react如何卸载

卸载 React 项目或依赖 如果需要完全卸载 React 项目或相关依赖,可以按照以下步骤操作: 删除项目文件夹 直接删除整个项目文件夹是最彻底的方式。确保已备份重要代码或配置文件。 卸载全…

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…

react如何diff

react如何diff

React Diff 算法原理 React 的 Diff 算法是 Virtual DOM 的核心部分,用于高效更新真实 DOM。其核心思想是通过对比新旧 Virtual DOM 树的差异,最小化 DO…