React 通过一个输入内容加入列表案例熟悉 Hook 基本使用

news2024/11/27 10:27:35

我们创建一个react项目 在src下创建components文件夹
在下面创建一个index.jsx
index.jsx 参考代码如下

import React, { useState } from "react";

const useInputValue = (initialValue) => {
    const [value,setValue] = useState(initialValue);
    return {
        value,
        onChange: e => setValue(e.target.value),
        clearValue: () => setValue("")
    }
}

const TodoForm = ({ onSubnit }) => {
    const { clearValue,...text } = useInputValue("");
    function onSubeitHandler(e){
        e.preventDefault();
        onSubnit(text.value);
        clearValue("");
    }
    return (
        <form onSubmit = { onSubeitHandler }>
            <input type="text" { ...text }/>
        </form>
    )
}

export default TodoForm

首先 我们通过一个比较典型的方法定义了一个用于声明表单元素绑定响应式数据的的函数useInputValue
接收一个参数 用于做响应式数据的默认值 然后暴露他的value 同时 绑定了一个onChange
onChange这个事件大家应该并不陌生 就是表单元素内容放生变化时
这里的意思就是 当 onChange 触发说明输入框或者其他表单元素内容已经变化了 那么 我们就执行setValue(e.target.value),
setValue是通过useInputValue声明出来用于修改响应式数据的函数 就是通过setValue将表单修改后的内容写入到响应式数据的内容当中
这个写法还是比较正规的 GitHub 很多案例采用这种方式
然后 我们自己写了一个clearValue 用于手动清空这个数据

然后 我们在开始执行了

const { clearValue,...text } = useInputValue("");

意识 我要一个clearValue单独拿出来用 然后 整个方法返回的那个对象 给我装在这个text 中
因为 value和onChange事件的逻辑一定要在一起 不然就出问题了

然后 我们给表单绑定了 onSubmit 事件 用于监听它提交 因为 我们就一个输入框 直接按回车 表单就提交内容了
然后绑定的事件逻辑是onSubeitHandler
首先 进入事件 我们最先执行

e.preventDefault();

阻止元素的默认行为 因为表单提交会跳转的 我们要拦截掉他的这个行为 不然你也可以不加这个看一下 就会自己跳转
然后 我们执行

onSubnit(text.value);

首先 参数来讲 text是通过useInputValue声明是获取的 那么 他的value就是这个响应式数据的值
调用了onSubnit
这个 onSubnit 是 父组件给的
在这里插入图片描述
可能大家看到不是很明白 或者 我们其实可以这样写
在这里插入图片描述
函数模式下 接受的第一个参数 就是props 为了方便 直接 { onSubnit }
意思就是 拿取 props中的 onSubnit
然后 调用了刚刚弄出来的 clearValue 清空响应式数据

然后 我们编写 src下的 App.js代码如下

import React,{ useState } from "react"
import Index from "./components/index.jsx"

const Appind = () => {
  
  const [todos,setTodos] = useState([]);

  function setValue(text) {
    setTodos([{ text },...todos]);
  }

  return (
    <div>
      <Index onSubnit={ setValue }/>
      <div>
          {
            todos.map((element,index) => {
              return (
                <div key={index}>
                  { element.text } 
                </div>
              )
            })
          }
      </div>
    </div>
  );
};

export default Appind;

这里 我们先导入了刚刚写的 index 组件 然后调用
声明了一个 todos 响应式数据 默认值是一个空数组
然后 声明setTodos 用于修改todos响应式数据

然后我们之前说过 index.jsx组件需要父组件给一个函数onSubnit
这里 我们给了setValue
里面的逻辑就是 接受到text 也就是index组件传过来的 text.value
将他通过ES6数组合并的方法与自身已有下标进行合并
然后通过 setTodos 修改值

然后 在index组件下写了一个循环 输出了todos数组的内容
我们运行项目
在这里插入图片描述
我们在输入框中输入内容 然后按回车 内容就会通过onSubnit 一个一个与todos合并 加载到下面的循环元素中去
在这里插入图片描述
这个按理的逻辑 大家还是可以好好去演示一下的 如果看懂了 收获会比较大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/650998.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【2023,学点儿新Java-01】从查看本机 jdk版本 开始 | Java基础全程脉络图、Java工程师全程技术路线、Java职业晋升路线图

一个人把生命耗尽&#xff0c;应该是为了一些美好的东西&#xff0c;值得的东西&#xff0c;用蓬勃如烈火的生命力 去战胜一个又一个人生的悲剧&#xff0c;这本身就是人生的意义之一吧&#xff01; &#x1f3af;作者主页&#xff1a; 追光者♂&#x1f525; &#x1f338;个人…

Win10 系统专业版远程桌面如何才能多用户同时登录使用?

环境&#xff1a; Win10专业版19041 RDPWrap-v1.6.2 dell5493笔记本 问题描述&#xff1a; Win10 系统专业版远程桌面如何才能多用户同时登录使用&#xff1f; 解决方案&#xff1a; 安装RDPWrap 1.关闭remote desktop services服务 安装RDP之前&#xff0c;要先关闭re…

8年性能测试工程师告诉你,压力测试详解,如何做压力测试...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 什么是压力测试&a…

灯塔工厂PLC智慧边缘计算机嵌入式linux系统

随着工业物联网的发展&#xff0c;越来越多的企业开始将工业自动化设备接入到物联网平台&#xff0c;以实现设备远程监控、运维和管理。其中&#xff0c;PLC智能网关作为连接PLC和物联网平台的重要设备&#xff0c;发挥着至关重要的作用。本文将介绍PLC数据采集控制网关的功能和…

文心一言 VS 讯飞星火 VS chatgpt (42)-- 算法导论5.4 6题

六、假设将n个球投人 n 个箱子里&#xff0c;其中每次投球独立&#xff0c;并且每个球等可能落入任何箱子。空箱子的数目期望是多少?正好有一个球的箱子的数目期望是多少? 文心一言&#xff1a; 这是一个典型的概率问题。首先&#xff0c;我们可以通过简单的计算来理解问题…

【论文】YOLOv7运行train.py和test.py时,打印不出来计算量GFLOPs解决方法

目录 前提案例解决步骤运行方式打印效果 前提 我在AutoDL云服务器上&#xff0c;会运行失败&#xff0c;不晓得为啥&#xff0c;我感觉可能是CUDA版本的问题&#xff0c;CUDA版本低了就会没有那么深的计算量吧 AutoDL上&#xff08;显卡RTX3090&#xff0c;4GB&#xff09;安…

java的网络编程

一、网络编程的三要素 IP、端口号、协议。 特殊IP地址127.0.0.1&#xff0c;也可以是localhost&#xff0c;是回送地址也称回环地址&#xff0c;也称本机IP&#xff0c;永远只会寻找当前所在本机。 常见cmd命令&#xff1a; ipconfig:查看本机IP地址&#xff1b; ping:检查网络…

Innovus: dbGet 快速学习教程

dbGet是innovus/encounter工具自带的"database access command"命令中的一部分&#xff0c;它几乎可以用来获取设计相关的一切信息。 输入dbGet 按[Tab]键&#xff0c;能看到三个选项&#xff0c;分别是head / top /selected。这三个选项所代表的意义如下: head --…

ubuntu 22.04安装mysql 8.0与避坑指南

MySQL 是一个开源数据库管理系统&#xff0c;可作为流行的 LAMP&#xff08;Linux、Apache、MySQL、PHP/Python/Perl&#xff09;堆栈的一部分安装。 它实现了关系模型并使用结构化查询语言&#xff08; SQL&#xff09;来管理其数据。 本教程将介绍如何在 Ubuntu 22.04 服务器…

appium+python在Android端的环境配置

一、安装配置JDK 一、安装环境 1、本机系统&#xff1a;Windows 10&#xff08;64位&#xff09; 2、JDK版本&#xff1a;1.8&#xff08;64位&#xff09; 二、下载安装 1、JDK和JRE简介 Java环境分JDK和JRE &#xff0c;JDK就是Java Development Kit。简单的说JDK是面向…

JMeter安装图文及入门教程,(附视频教程)

目录 一、JMeter介绍 二、下载配置安装 三、JMeter入门压测实例 总结&#xff1a; 一、JMeter介绍 JMeter是Apache组织开发的基于Java的压力测试工具。用于对软件做压力测试&#xff0c;它最初被设计用于Web应用测试&#xff0c;但后来扩展到其他测试领域。它可以用于测试静…

Go语言并发之context标准库

1、Go语言并发之context标准库 Go中的 goroutine 之间没有父与子的关系&#xff0c;也就没有所谓子进程退出后的通知机制&#xff0c;多个 goroutine 都是平行地 被调度&#xff0c;多个 goroutine 如何协作工作涉及通信、同步、通知和退出四个方面。 通信&#xff1a;chan 通…

ResNet

论文信息 论文名称&#xff1a;Deep Residual Learning for Image Recognition 论文地址&#xff1a;https://arxiv.org/pdf/1512.03385.pdf 发表期刊&#xff1a;CVPR 发表年份&#xff1a;2016 主要问题 在引言中作者提出了一个问题&#xff1a;训练一个更好的网络是否像堆…

这个网站,多希望你早点知道,越早越好!

这是一个有趣、神奇的个人博客网站。 这是一个马斯克经常上的网站&#xff0c;而且马斯克还在推特上关注了这个网站的账号。 网站地址&#xff1a;https://waitbutwhy.com/ 这个网站上的内容并不多&#xff0c;网站2013年创建的&#xff0c;至今已有10年&#xff0c;一共才产出…

python爬虫工程师,如何从零开始部署Scrapyd+Feapder+Gerapy?

突然被告知要连着上整整十一天的班&#xff0c;有一点点累&#xff0c;简单更新一下内容吧&#xff0c;水个积分 关注公众号&#xff1a;python技术训练营&#xff0c;精选优质文档&#xff0c;好玩的项目 内容&#xff1a; 1.面试专题几十个大厂面试题 2.入门基础教程 3.11模块…

活动邀请函五秒钟下载即用

在日常中&#xff0c;人们都是以纸质的邀请函发送给被邀请者&#xff0c;不仅需要花费大量的精力和时间去书写发送活动邀请函&#xff0c;还存在着被邀请人没有及时收到活动邀请函而错过参与的时间等。而这样只需制作一份就可以全网分享&#xff0c;用户短时间就能收到活动邀请…

可变参数列表

"多少人都&#xff0c;生来纯洁完美&#xff0c;心底从不染漆黑。" 我们想要实现一个函数&#xff0c;这个函数的功能是返回一个整形的最大值。 emm&#xff0c;似乎有那点味道。但这应用场景似乎很受限制&#xff0c;因为这个函数比较的有效区间&#xff0c;只能装下…

Pycharm远程开发之全局pip,激活远程虚拟环境pip,以及pip的--user选项

前言 最近需要部署一下生成对抗网络的开发环境&#xff0c;我自己的笔记本没有带显卡&#xff0c;想到实验室的服务器有带显卡索性就用实验室服务器的环境开发&#xff0c;通过pycharm的远程开发功能连接到服务器&#xff0c;本来以为轻轻松松就可以开始写代码了&#xff0c;结…

springcloud整合nacos

1.订单服务&#xff08;order&#xff09; 1.1 安装nocas Nacos 快速开始 --注意&#xff1a;nacos 我的是 nacos-server-1.4.1.tar.gz 1.2 新建order-nacos 模块 1.3 修改pom文件 添加 nacos 依赖 1.4 配置文件添加 nacos 地址 1.5 创建启动类 使用 RestTemplate 方式调用服…

字符设备驱动内部实现

只要文件存在&#xff0c;就会有唯一对应的inode号&#xff0c;且相应的会存在一个struct inode结构体.,在应用层通过open&#xff08;&#xff09;打开一个设备文件&#xff0c;会对应产生一个inode号&#xff0c;通过inode号可以找到文件的inode结构体&#xff0c;inode结构体…