hooks实现toDoList

简介: 使用React Hooks实现ToDoList应用,包括添加和删除待办事项功能,通过useState管理状态,并对输入进行唯一性校验以避免姓名重复。

在这里插入图片描述
这里不涉及声明周期,所以只是用到了useState:

/*
 * @Descripttion: 
 * @version: 
 * @Author: ZhangJunQing
 * @Date: 2022-03-07 16:19:28
 * @LastEditors: ZhangJunQing
 * @LastEditTime: 2022-03-10 14:24:56
 */
import React, {
     useState } from 'react'

const TodoList = () => {
   
    let [name, setName] = useState('')
    let [age, setAge] = useState('')
    let [habby, setHabby] = useState('')
    let [dataList, setDateList] = useState([])
    const changeInput = (set, value) => {
   
        if (value.target) {
   
            set(_ => value.target.value)
        } else {
   
            set(_ => value)
        }
    }
    // 新增列表
    // name唯一标识
    const add = () => {
   
        if (dataList.find(i => i.name === name)) {
   
            alert("姓名重复!")
            return false
        }
        setDateList(list => [...list, {
    name, age, habby }])
        // 清空默认值
        setName("")
        setAge("")
        setHabby("")
    }
    // 删除
    const del=(name)=>{
   
        setDateList(list=>list.filter(i=>name!==i.name))
    }
    return (
        <div style={
   {
    marginTop: "20px" }}>
            <div style={
   {
    marginBottom: "20px" }}>
                姓名:<input value={
   name} onChange={
   (e) => {
    changeInput(setName, e.target.value) }} /> <br />
            </div>
            <div style={
   {
    marginBottom: "20px" }}>
                年龄:<input value={
   age} onChange={
   (e) => {
    changeInput(setAge, e.target.value) }} /> <br />
            </div>
            <div style={
   {
    marginBottom: "20px" }}>
                爱好:<input value={
   habby} onChange={
   (e) => {
    changeInput(setHabby, e.target.value) }} /> <br />
            </div>
            <button onClick={
   add}>新增</button>
            <table style={
   {
    border: "1px solid red", width: "300px", marginTop: "20px" }}>
                <thead>
                    <tr>
                        <th>姓名</th>
                        <th>年龄</th>
                        <th>爱好</th>
                        <th>操作</th>
                    </tr>
                </thead>
                <tbody>
                    {
   dataList.map(i => {
   
                        return (
                            <tr key={
   i.name}>
                                <th>{
   i.name}</th>
                                <th>{
   i.age}</th>
                                <th>{
   i.habby}</th>
                                <th style={
   {
   color:"orange"}} onClick={
   ()=>{
   del(i.name)}}>删除</th>
                            </tr>
                        )
                    })}
                </tbody>
            </table>
        </div>
    )
}

export default TodoList
目录
相关文章
|
20天前
|
存储 缓存 JavaScript
深入理解 React-Hooks 之 useRef
【10月更文挑战第20天】总之,`useRef` 是 React-Hooks 中一个非常实用的工具,它为我们提供了一种灵活而强大的方式来处理组件中的各种数据和操作。通过深入理解和掌握 `useRef` 的原理和用法,我们能够更好地构建高效、稳定的 React 应用。
30 6
|
30天前
|
前端开发 JavaScript API
React Refs
10月更文挑战第10天
11 1
|
2月前
|
存储 前端开发 JavaScript
react hooks--useRef
react hooks--useRef
|
3月前
|
前端开发 JavaScript
你对 React 中的 refs 有何理解?
【8月更文挑战第30天】
44 6
|
前端开发 API
vue3中Pinia的使用之actions
vue3中Pinia的使用之actions
|
6月前
|
资源调度 JavaScript 前端开发
React-Redux 对Todolist修改
React-Redux 对Todolist修改
43 0
|
6月前
|
JavaScript 前端开发
React结合Redux实现Todolist
React结合Redux实现Todolist
46 0
|
12月前
|
容器
Vue3.0实现todolist-实现todolist每个组件需要用到的方法
Vue3.0实现todolist-实现todolist每个组件需要用到的方法
32 1
|
存储 前端开发 容器
React-Hooks-useContext
React-Hooks-useContext
43 0
|
存储
React-Hooks-useRef
React-Hooks-useRef
56 0