使用React 实现一个简单的待办事项列表:用户可以添加、编辑和删除待办事项; | 豆包MarsCode AI刷题

104 阅读2分钟

引言

最近在学习React,Marscode的在线IDE真的很好用,非常适合学习新技术的时候写一些小demo,即开即用,省心省力。下面记录一下我在Marscode上使用React实现一个简单待办事项列表的实践

需求

用户可以添加、编辑和删除待办事项

开发流程

环境搭建

使用Marscode搭建React开发环境非常简单。

  1. 打开Marscode首页,新建一个项目

image.png

  1. 在右侧的模板中选择Web下面的React模板,再给项目娶个名字,点击创建即可

image.png

  1. 创建后就来到了经典的IDE布局的页面,不同的是右边多了一个AI助手,这也是这个在线IDE的强大之处,可以随时使用AI来帮助我们开发。

image.png

开发

使用AI协助开发,对于简单的需求,我们可以直接试着让AI帮我们实现。比如现在我们要做一个代办事项列表,功能是用户可以添加、编辑和删除待办事项,我们可以直接丢给AI,看看AI的回答能否帮到我们。

image.png

发现AI直接帮我们把todolist这个组件的代码给写出来了

import React, { useState } from 'react';

interface Todo {
  id: number;
  text: string;
  completed: boolean;
}

const TodoList: React.FC = () => {
  const [todos, setTodos] = useState<Todo[]>([]);
  const [newTodo, setNewTodo] = useState('');

  const addTodo = () => {
    if (newTodo.trim()!== '') {
      setTodos([...todos, { id: Date.now(), text: newTodo, completed: false }]);
      setNewTodo('');
    }
  };

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

  const editTodo = (id: number, newText: string) => {
    setTodos(
      todos.map((todo) =>
        todo.id === id? {...todo, text: newText } : todo
      )
    );
  };

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

  return (
    <div>
      <h1>待办事项列表</h1>
      <input
        type="text"
        value={newTodo}
        onChange={(e) => setNewTodo(e.target.value)}
        placeholder="添加新事项"
      />
      <button onClick={addTodo}>添加</button>
      <ul>
        {todos.map((todo) => (
          <li key={todo.id}>
            <input
              type="checkbox"
              checked={todo.completed}
              onChange={() => toggleTodo(todo.id)}
            />
            <span style={{ textDecoration: todo.completed? 'line-through' : 'none' }}>
              {todo.text}
            </span>
            <button onClick={() => editTodo(todo.id, prompt('编辑事项:', todo.text))}>编辑</button>
            <button onClick={() => deleteTodo(todo.id)}>删除</button>
          </li>
        ))}
      </ul>
    </div>
  );
};

export default TodoList;

我们尝试把这个代码cv到在线IDE里运行。

新建一个tsx文件,把组件的代码cv到里面

image.png

发现有一处报错,我们把鼠标移到报错上,发现有一个AI修复

image.png

我们试着让AI帮我们修复这个问题

image.png

AI给出了修复建议,并且页面展示成了类似于git merge conflict的界面,非常便于我们选择采用或接纳

image.png

我们选择接受,发现不报错了

image.png

接着在App组件中引入TodoList组件

image.png

点击上面的运行,就能在右侧看见运行结果。

image.png

测试

添加代办

image.png

image.png

编辑代办

image.png

删除代办

image.png

符合测试预期。

至此,我们已经开发完了这个小demo,是不是非常方便!

当然,我们还需要根据业务的具体情况来修改AI的代码。AI是工具,我们要学会使用它提升我们的开发效率。