使用React实现TodoList | 青训营

405 阅读2分钟

使用React实现TodoList | 青训营

在这篇笔记中,将讲述如何使用React创建一个简单的TodoList应用。

步骤一:设置环境

在命令行中创建一个新的React应用程序:

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

这将创建一个新的React应用程序并启动开发服务器。

步骤二:创建Todo组件

在src文件夹中,创建一个名为 Todo.js的文件。这将是我们TodoList的核心组件。

import React, { useState } from 'react';

function Todo() {
  const [tasks, setTasks] = useState([]);
  const [newTask, setNewTask] = useState('');

  const addTask = () => {
    if (newTask.trim() !== '') {
      setTasks([...tasks, newTask]);
      setNewTask('');
    }
  };

  const removeTask = (index) => {
    const updatedTasks = tasks.filter((_, i) => i !== index);
    setTasks(updatedTasks);
  };

  return (
    <div>
      <h2>Todo List</h2>
      <input
        type="text"
        value={newTask}
        onChange={(e) => setNewTask(e.target.value)}
        placeholder="Enter a new task..."
      />
      <button onClick={addTask}>Add Task</button>
      <ul>
        {tasks.map((task, index) => (
          <li key={index}>
            {task}
            <button onClick={() => removeTask(index)}>Remove</button>
          </li>
        ))}
      </ul>
    </div>
  );
}

export default Todo;

步骤三:使用Todo组件

现在,我们需要在主应用程序中使用这个Todo组件。打开 src/App.js,然后进行如下修改:

import React from 'react';
import './App.css';
import Todo from './Todo';

function App() {
  return (
    <div className="App">
      <header className="App-header">
        <Todo />
      </header>
    </div>
  );
}

export default App;

当然可以,在步骤三中添加编辑功能来修改现有的任务。以下是在步骤三的基础上如何添加编辑功能的修改。

步骤四:添加编辑功能

src/Todo.js文件中,在每个任务旁边添加一个编辑按钮,并在点击编辑按钮时显示一个输入框,以便用户可以编辑任务。

// ...(之前的代码)

function Todo() {
  // ...(之前的代码)

  const [editingIndex, setEditingIndex] = useState(-1);
  const [editedTask, setEditedTask] = useState('');

  const editTask = (index, task) => {
    setEditingIndex(index);
    setEditedTask(task);
  };

  const saveEditedTask = (index) => {
    const updatedTasks = tasks.map((task, i) => (i === index ? editedTask : task));
    setTasks(updatedTasks);
    setEditingIndex(-1);
    setEditedTask('');
  };

  return (
    <div>
      <h2>Todo List</h2>
      <input
        type="text"
        value={newTask}
        onChange={(e) => setNewTask(e.target.value)}
        placeholder="Enter a new task..."
      />
      <button onClick={addTask}>Add Task</button>
      <ul>
        {tasks.map((task, index) => (
          <li key={index}>
            {index === editingIndex ? (
              <>
                <input
                  type="text"
                  value={editedTask}
                  onChange={(e) => setEditedTask(e.target.value)}
                />
                <button onClick={() => saveEditedTask(index)}>Save</button>
              </>
            ) : (
              <>
                {task}
                <button onClick={() => removeTask(index)}>Remove</button>
                <button onClick={() => editTask(index, task)}>Edit</button>
              </>
            )}
          </li>
        ))}
      </ul>
    </div>
  );
}

export default Todo;

在这个修改后的代码中,我们添加了一个editingIndex状态,用于跟踪当前正在编辑的任务的索引。当点击编辑按钮时,我们设置editingIndex并显示一个可编辑的输入框,允许用户修改任务。点击“Save”按钮后,我们将更新任务列表,并重置编辑状态。

步骤五:样式化

为了美化我们的TodoList,您可以在 src/App.css中添加一些样式规则,使其看起来更漂亮。

.App {
  text-align: center;
}

.App-header {
  background-color: #282c34;
  min-height: 100vh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  font-size: calc(10px + 2vmin);
  color: white;
}

input {
  padding: 0.5rem;
  margin-right: 1rem;
}

button {
  padding: 0.5rem 1rem;
  background-color: #007bff;
  border: none;
  color: white;
  cursor: pointer;
}

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

li {
  display: flex;
  justify-content: space-between;
  align-items: center;
  margin-top: 0.5rem;
}

步骤六:运行应用

保存文件后,回到命令行运行 npm start。就可以在浏览器中看到一个简单的TodoList界面,可以添加、删除、编辑任务。