todoList案例(react版本)之删除todo

本文档展示了如何在React应用中实现删除Todo的功能。主要涉及App.js、List/index.jsx和Item/index.jsx三个组件的代码变更,通过点击按钮触发删除操作,并使用filter方法更新状态。此外,还提到了鼠标移入效果的CSS实现。
摘要由CSDN通过智能技术生成

鼠标移入效果采用css实现。

删除todo,代码变更涉及的文件有:

  1. App.js,即App组件
  2. List/index.jsx,即List组件
  3. Item/index.jsx,即Item组件

在这里插入图片描述

App.js(App组件)

import React, { Component } from 'react';
import Header from "./components/Header";
import List from "./components/List";
import Footer from "./components/Footer";
import "./App.css";

export default class App extends Component {
  state = {
    todos:[
      {id:"001",title:"吃饭",done:true},
      {id:"002",title:"睡觉",done:true},
      {id:"003",title:"打豆豆",done:false}
    ]
  }

  addTodo = (todoObj) => {
    const {todos} = this.state;
    const newTodos = [todoObj,...todos];
    this.setState({
      todos:newTodos
    })
  }

  checkTodo = (id,done) => {
    const {todos} = this.state;
    const newTodos = todos.map(todoObj => {
      if(todoObj.id === id) return {...todoObj,done:done}
      else return todoObj;
    })
    this.setState({
      todos:newTodos
    })
  }

  deleteTodo = (id) => {
    const {todos} = this.state;
    const newTodos = todos.filter(todo => todo.id !== id);
    this.setState({
      todos:newTodos
    })
  }

  render() {
    const {todos} = this.state;
    const {addTodo,checkTodo,deleteTodo} = this;
    
    return (
    <div className="todo-container">
      <div className="todo-wrap">
        <Header addTodo={addTodo}/>
        <List todos={todos} checkTodo={checkTodo} deleteTodo={deleteTodo}/>
        <Footer/>
      </div>
    </div>
    )
  }
}

List/index.jsx(List组件)

import React, { Component } from 'react';
import Item from "../Item";
import "./index.css";

export default class List extends Component {
  render() {
    const {todos,checkTodo,deleteTodo} = this.props;
    return (
      <ul className="todo-main">
      {
        todos.map(todo => <Item key={todo.id} {...todo} checkTodo={checkTodo} deleteTodo={deleteTodo}/>)
      }
      </ul>
    )
  }
}

Item/index.jsx(Item组件)

import React, { Component } from 'react'
import "./index.css";

export default class Item extends Component {

  handleChange = (id) => {
    return (event) => {
      this.props.checkTodo(id,event.target.checked);
    }
  }

  handleClick = (id) => {
    return () => {
      if(window.confirm("确定删除吗?")){
        this.props.deleteTodo(id);
      }
    }
  }

  render() {
    const {id,title,done} = this.props;
    const {handleChange,handleClick} = this;
    return (
      <li>
        <label>
          <input type="checkbox" defaultChecked={done} onChange={handleChange(id)}/>
          <span>{title}</span>
        </label>
        <button className="btn btn-danger" onClick={handleClick(id)}>删除</button> 
      </li>
    )
  }
}

相关链接

todoList案例(react版本)之搭建静态页面
todoList案例(react版本)之初始化列表
todoList案例(react版本)之添加todo
todoList案例(react版本)之勾选/去勾选todo
todoList案例(react版本)之鼠标移入效果

React 版本ToDo List 可以使用 React 的组件化开发方式来实现。首先,你需要创建一个名为 `TodoList` 的 React 组件,它将包含待办事项列表并管理其状态。 ```jsx import React, { useState } from 'react'; const TodoList = () => { const [todos, setTodos] = useState([]); const [inputValue, setInputValue] = useState(''); const addTodo = () => { if (inputValue.trim() !== '') { setTodos([...todos, inputValue]); setInputValue(''); } }; const removeTodo = (index) => { const updatedTodos = todos.filter((_, i) => i !== index); setTodos(updatedTodos); }; return ( <div> <input type="text" value={inputValue} onChange={(e) => setInputValue(e.target.value)} /> <button onClick={addTodo}>Add</button> <ul> {todos.map((todo, index) => ( <li key={index}> {todo} <button onClick={() => removeTodo(index)}>Remove</button> </li> ))} </ul> </div> ); }; export default TodoList; ``` 在上面的代码中,我们使用了 React 的 `useState` 钩子来创建了 `todos` 和 `inputValue` 两个状态。`todos` 用于存储待办事项列表,`inputValue` 用于获取输入框的值。 `addTodo` 函数用于将输入框的内容添加到 `todos` 列表中,并清空输入框的值。`removeTodo` 函数用于移除指定位置的待办事项。 在组件的返回部分,我们渲染了一个输入框、一个添加按钮和一个待办事项列表。通过 `map` 方法遍历 `todos` 列表,并为每一个待办事项创建一个包含删除按钮的列表项。 你可以将这个 `TodoList` 组件嵌入到你的 React 应用中,从而实现一个基本的 ToDo List 功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值