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`管理。
334 1
React_函数式Hooks和Class比较优缺点
|
11月前
|
前端开发 UED
响应式设计的核心:拥抱移动优先的布局策略
响应式设计的核心:拥抱移动优先的布局策略
359 85
|
6月前
|
消息中间件 编解码 Kafka
企业微信ipad协议:Silk语音流转码为PCM的实时管线设计企业微信ipad协议:Silk语音流转码为PCM的实时管线设计企业微信ipad协议:Silk语音流转码为PCM的实时管线设计企业微信ipad协议:Silk语音流转码为PCM的实时管线设计
企业微信iPad协议中,语音消息采用Silk V3编码。为实现低延迟ASR,网关需实时将流式Silk解码为PCM并推送Kafka。通过内存池缓存解码器、无锁环形队列传输、逐块分窗处理,实现零拷贝、P99延迟≤10ms。单核支持200路并发,为实时字幕与语义分析提供高效数据底座。(238字)
973 0
|
机器学习/深度学习 人工智能 运维
人工智能在事件管理中的应用
人工智能在事件管理中的应用
416 21
|
移动开发 前端开发 数据可视化
React 拖拽布局组件 Drag & Drop Layout
本文介绍了如何在React中构建拖拽布局组件,涵盖基础知识、常见问题及解决方案。首先解释了拖拽操作的三个阶段:开始、过程中和结束。接着推荐了几个常用的拖拽库,如`react-beautiful-dnd`,并详细展示了如何使用该库创建基础拖拽组件,包括安装依赖、初始化容器和处理拖拽结束事件。文章还探讨了常见问题,如拖拽不生效、性能优化、嵌套拖拽和跨浏览器兼容性,并提供了进阶技巧,如自定义样式、多列布局和集成其他UI组件。通过这些内容,读者可以掌握构建高效拖拽布局的方法。
1060 16
|
JavaScript NoSQL 关系型数据库
当下弹幕互动游戏源码开发教程及功能逻辑分析
当下很多游戏开发者或者想学习游戏开发的人,想要了解如何制作弹幕互动游戏,比如直播平台上常见的那种,观众通过发送弹幕来影响游戏进程。需要涵盖教程的步骤和功能逻辑的分析。
解决 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.
1192 0
|
开发框架 供应链 JavaScript
齐套检查与分配在生产计划中的实现
最近一段时间看到很多关于生产计划中,作齐套检查与分析讨论,正好我们的易排1.5版添加了类似功能。本文结合易排平台上相应的功能与特征,介绍一下我们在这方面的些许研究结论与看法。
765 0
|
C语言 开发者
C语言实现猜数字小游戏(详细教程)
C语言实现猜数字小游戏(详细教程)
|
前端开发 JavaScript 数据库
Web的B/S架构
Web的B/S架构
2305 1