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
目录
相关文章
|
前端开发 JavaScript
React_函数式Hooks和Class比较优缺点
React Hooks与Class组件都能返回JSX并接收props,但Hooks无`this`指向问题,用`useEffect`模拟生命周期,`memo`优化性能,状态更新用`useState`;Class组件通过生命周期方法、`PureComponent`或`shouldComponentUpdate`优化,状态用`this.state`和`this.setState`管理。
196 1
React_函数式Hooks和Class比较优缺点
|
11月前
|
移动开发 前端开发 数据可视化
React 拖拽布局组件 Drag & Drop Layout
本文介绍了如何在React中构建拖拽布局组件,涵盖基础知识、常见问题及解决方案。首先解释了拖拽操作的三个阶段:开始、过程中和结束。接着推荐了几个常用的拖拽库,如`react-beautiful-dnd`,并详细展示了如何使用该库创建基础拖拽组件,包括安装依赖、初始化容器和处理拖拽结束事件。文章还探讨了常见问题,如拖拽不生效、性能优化、嵌套拖拽和跨浏览器兼容性,并提供了进阶技巧,如自定义样式、多列布局和集成其他UI组件。通过这些内容,读者可以掌握构建高效拖拽布局的方法。
753 16
|
7月前
|
网络协议 前端开发 Shell
某次黑盒rce
看见公众号发了个day 搜了一下发现全网首发这个rce啊 其他地方发的都是任意文件读取 文件读取嘛 这个洞没啥太大的卵用 其实 但我看到是php的系统 任意文件读取有时候还是能出货的 读点源码审一下还是可以的
|
JavaScript 前端开发
Hooks使用createStore、Provider、useSelector、useDispatch实现connect功能
使用React Hooks实现connect功能,通过createStore创建仓库,Provider提供store,useSelector获取state,useDispatch触发action,从而在函数式组件中管理状态,替代类组件中的connect功能。
172 5
Hooks使用createStore、Provider、useSelector、useDispatch实现connect功能
|
前端开发 JavaScript 数据库
Web的B/S架构
Web的B/S架构
1420 1
解决 Error: Node Sass version 6.0.1 is incompatible with ^4.0.0.
解决 Error: Node Sass version 6.0.1 is incompatible with ^4.0.0.
1111 0
|
Windows
【vscode】 VsCode终端崩溃C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe已终止,退出代码:2
【vscode】 VsCode终端崩溃C:\WINDOWS\System32\WindowsPowerShell\v1.0\powershell.exe已终止,退出代码:2
2986 1
Qt自定义控件(数字框与拖拽条互动)
Qt自定义控件(数字框与拖拽条互动)
158 2
|
JSON 数据可视化 数据格式
Python小姿势 - Python使用Jupyter Notebook
Python小姿势 - Python使用Jupyter Notebook
|
Ubuntu Linux 编译器
【从零开始的嵌入式生活】必备基础知识,从环境安装开始(1)
【从零开始的嵌入式生活】必备基础知识,从环境安装开始(1)
【从零开始的嵌入式生活】必备基础知识,从环境安装开始(1)