【React学习打卡第二天】

news2024/12/23 16:41:18

受控表单绑定、React获取Dom\组件通信、useEffect、自定义hook函数和ReactHooks使用规则

  • 一、受控表单绑定
    • 1.准备React状态值
    • 2.通过value属性绑定状态,通过onChange属性绑定状态同步的函数
  • 二、React中获取DOM
    • 1. 使用useRef创建 ref 对象,并与 JSX 绑定
    • 2.在DOM可用时,通过 inputRef.current 拿到 DOM 对象
  • 三、发表评论案例
  • 四、组件通信
    • 1.父子通信
      • (1)父传子
      • (2)props说明
        • 特殊的prop children
      • (3)子传父
    • 2.使用状态提升实现兄弟组件通信
    • 3.使用Context机制跨层级组件通信
  • 五、useEffect
    • 1.基本使用
    • 2.依赖项参数说明
    • 3.清楚副作用
  • 六、自定义hook函数
  • 七、ReactHooks使用规则
    • 1. 只能在组件中或者其他自定义Hook函数中调用
    • 2. 只能在组件的顶层调用,不能嵌套在 if、for、其他函数中
  • 八、优化评论案例
    • 1.通过接口获取评论列表
    • 2.自定义Hook函数封装数据请求
    • 3.封装评论项Item组件

一、受控表单绑定

在这里插入图片描述

1.准备React状态值

const [value,setValue]=useState(")

2.通过value属性绑定状态,通过onChange属性绑定状态同步的函数

<input
	type="text"
	value={value}
	onChange={(e)=>setValue(e.target.value)}
/>

二、React中获取DOM

在 React 组件中获取/操作 DOM,需要使用 useRef React Hook钩子函数,分为两步

1. 使用useRef创建 ref 对象,并与 JSX 绑定

在这里插入图片描述

2.在DOM可用时,通过 inputRef.current 拿到 DOM 对象

可用:DOM渲染完毕时可用

在这里插入图片描述

//app.js
import {useRef} from "React"
	function App(){
	const inputRef=useRef(null)
	const getDom=()=>{
		console.log(inputRef.current)
	}
	return(
		<div>
			<input type="text" ref={inputRef}/>
			<button onClick={getDom}>获取Dom<button/>
		<div/>
	)
}

三、发表评论案例

在这里插入图片描述

需求:获取评论内容 ;点击发布按钮发布评论

1.准备状态值
在这里插入图片描述
2.实现双向绑定
在这里插入图片描述
3.绑定点击事件并声明回调
在这里插入图片描述
在这里插入图片描述

优化:rpid要求一个唯一的随机数id - uuid;ctime要求以当前时间为标准,生成固定格式 - dayjs

在这里插入图片描述
dayjs官网:https://day.js.org/docs/en/installation/node-js
在这里插入图片描述
在这里插入图片描述

清空内容并重新聚焦

  1. 清空内容 - 把控制input框的value状态设置为空串
    在这里插入图片描述

  2. 重新聚焦 - 拿到input的dom元素,调用focus方法
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

四、组件通信

概念:组件通信就是组件之间的数据传递,根据组件嵌套关系的不同,有不同的通信方法

1.父子通信

(1)父传子

父组件传递数据 -在子组件标签上绑定属性
子组件接收数据 - 子组件通过props参数接收数据

//子组件
function Son(props){
	console.log(props)
	return <div>hi,I am {props.name}'s son </div>
}
//父组件
function App(){
	const name="Jack"
	return(
		<div>
			<Son name={name}></Son>
		<div/>
	)
}
		

注:props对象里包含了父组件传递过来的所有数据

(2)props说明

props可传递任意的数据:数字、字符串、布尔值、数组、对象、函数、JSX;props是只读对象,子组件只能读取props中的数据,不能直接进行修改, 父组件的数据只能由父组件修改

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

特殊的prop children

当我们把内容嵌套在子组件标签中时,父组件会自动在名为children的prop属性中接收该内容

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

(3)子传父

核心思路:在子组件中调用父组件中的函数并传递参数

import {useState} form "react"
function Son({onGetMsg}){
	const sonMsg="this is son Msg "
	return {
		<div>
			this is son
			<button onClick={()=>onGetSonMsg(sonMsg)}>点我发送给父组件<button/>
		</div>
	}
function App(){
	const [msg,setMsg]=useState("")
	const getMsg=(msg)=>{
		console.log(msg)
		setMsg(msg)
	}
	return (
		<div>
			this is App,{msg}
			<Son onGetSonMsg={getMsg}/>
		<div/>
	)
}

2.使用状态提升实现兄弟组件通信

在这里插入图片描述
实现思路:借助“状态提升”机制,通过共同的父组件进行兄弟组件之间的数据传递
A组件先通过子传父的方式把数据传给父组件App
App拿到数据后通过父传子的方式再传递给B组件
在这里插入图片描述
在这里插入图片描述

3.使用Context机制跨层级组件通信

在这里插入图片描述
实现思路:使用createContext方法创建一个上下文对象Ctx
在顶层组件(App)中通过 Ctx.Provider 组件提供数据
在底层组件(B)中通过 useContext 钩子函数获取消费数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

五、useEffect

1.基本使用

useEffect是一个React Hook函数,用于在React组件中创建不是由事件引起而是由渲染本身引起的操作(副作用), 比如发送AJAX请求,更改DOM等等

在这里插入图片描述
上面的组件中没有发生任何的用户事件,组件渲染完毕之后就需要和服务器要数据,整个过程属于“只由渲染引起的操作”
在这里插入图片描述

在这里插入图片描述

2.依赖项参数说明

在这里插入图片描述
依赖项例子中只要count变化也会再次执行
在这里插入图片描述

3.清楚副作用

在useEffect中编写的由渲染本身引起的对接组件外部的操作,社区也经常把它叫做副作用操作,比如在useEffect中开启了一个定时器,我们想在组件卸载时把这个定时器再清理掉,这个过程就是清理副作用

在这里插入图片描述
说明:清除副作用的函数最常见的执行时机是在组件卸载时自动执行
需求:在Son组件渲染时开启一个定制器,卸载时清除这个定时器
在这里插入图片描述

六、自定义hook函数

概念:自定义Hook是以 use 打头的函数,通过自定义Hook函数可以用来实现逻辑的封装和复用

案例需求:点击toggle实现div的消失和隐藏
思路:声明一个use开头的函数,在函数体内封装可复用的逻辑,把组件中用到的状态或者回调return出去,在哪个组件中用到这个逻辑就执行这个函数,结构出状态和回调即可使用。
在这里插入图片描述
自定义封装useToggle函数:
在这里插入图片描述

七、ReactHooks使用规则

1. 只能在组件中或者其他自定义Hook函数中调用

2. 只能在组件的顶层调用,不能嵌套在 if、for、其他函数中

在这里插入图片描述

八、优化评论案例

需求: 使用请求接口的方式获取评论列表并渲染 ;使用自定义Hook函数封装数据请求的逻辑;把评论中的每一项抽象成一个独立的组件实现渲染

1.通过接口获取评论列表

(1). 使用 json-server 工具模拟接口服务, 通过 axios 发送接口请求,json-server是一个快速以.json文件作为数据源模拟接口服务的工具,axios是一个广泛使用的前端请求库
安装json-server:

安装:npm i json-server -D
创建一个db.json的文件
在package.json文件的脚本执行命令中添加一条"serve":"json-server db.json --port 3004"
执行npm run serve运行命令

安装axios:
npm install axios
4542d.png)

(2). 使用 useEffect 调用接口获取数据

在这里插入图片描述

2.自定义Hook函数封装数据请求

(1)编写一个use开头的函数
(2)函数内部编写封装逻辑
(3)return 出去组件中用到的状态和方法
(4)组件中调用函数解构赋值使用

在这里插入图片描述
在这里插入图片描述

3.封装评论项Item组件

抽象原则:App作为“智能组件”负责数据的获取,Item作为“UI组件”负责数据的渲染

在这里插入图片描述
在这里插入图片描述
删除功能变成了需要子传父
父组件:
在这里插入图片描述
子组件:
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

使用图数据库Nebula Graph快速上手史上最大规模的中文知识图谱ownthink_v2教程(没写完,明天再写)

一、前言 本教程主要参考官方教程&#xff1a;使用图数据库 Nebula Graph 数据导入快速体验知识图谱 OwnThink (nebula-graph.com.cn) 来带着大家一步一步复现实验内容。 本教程主要使用到的数据集&#xff1a; ownthink/KnowledgeGraphData: 史上最大规模1.4亿中文知识图谱…

MySQL 存储

关系型数据库是基于关系模型的数据库&#xff0c; 而关系模型是通过二维表来保存的&#xff0c;所以关系型数据库中的数据的村方式就是行列组成的表&#xff0c;每一列代表一个字段&#xff0c;每一行代表一条记录。表可以看作某个实体的集合&#xff0c;实体之间存在的联系需要…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十三章 设备树下的platform驱动

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

基于开源大模型的问答系统本地部署实战教程

1. 现有大模型产品使用感受 在开始教你搭建属于自己的本地大模型之前&#xff0c;先说下自己日常使用大模型的感受。常用的比较好的国外大模型工具&#xff0c;经常会遇到网络卡或者token数量、使用次数限制的问题。而国内的大模型工具虽然不存在网络的问题&#xff0c;但…

简单几步,教你使用scikit-learn做分类和回归预测

经常听到初学python的小伙伴在抱怨&#xff0c;python安装第三方库太慢&#xff0c;很容易失败报错&#xff0c;如果安装pandas、tensorflow这种体积大的库&#xff0c;简直龟速。 为什么pip会很慢&#xff1f; 先来了解下pip&#xff0c;pip是一个非常流行的python包管理工具…

基于微信小程序+SpringBoot+Vue的资料分享系统(带1w+文档)

基于微信小程序SpringBootVue的资料分享系统(带1w文档) 基于微信小程序SpringBootVue的资料分享系统(带1w文档) 校园资料分享微信小程序可以实现论坛管理&#xff0c;教师管理&#xff0c;公告信息管理&#xff0c;文件信息管理&#xff0c;文件收藏管理等功能。该系统采用了Sp…

初识C++ · AVL树(2)

目录 前言&#xff1a; 1 左右旋 2 右左旋 3 部分细节补充 3.1 单旋和插入 3.2 部分小函数 前言&#xff1a; AVL树作为一种结构&#xff0c;理解树的本身是不大难的&#xff0c;难的在于&#xff0c;树旋转之后的连接问题&#xff0c;写AVL树的代码大部分都是在旋转部分…

在jeesite开源平台上写了一个SQL命令中心的功能

实现目的: 这个SQL命令中心,是因为老项目就有这个页面,主要的功能是根据写出的SQL语句查询数据,并且在查出的数据基础上直接修改更新,还有新增和删除的功能,这么一说跟plsql就一样一样的了;这页面本来是给运维的同事来用,而且他们还会用plsql和Navicat等SQL语言操作工…

[OJ]平均串问题,存在超时问题未解决

众所周知&#xff0c;两个数a和b的平均数计算公式为(ab)/2。 实际上平均数也可以描述为&#xff1a;从较小的数依次遍历到较大的数&#xff0c;将遍历的数放入一个列表中&#xff0c;该列表的中心元素。例如&#xff1a;求 3和7的平均数&#xff0c;列表为{3,4,5,6,7}&#xff…

FPGA与ASIC:深入解析芯片设计的双子星

前言 在半导体世界里&#xff0c;FPGA&#xff08;Field-Programmable Gate Array&#xff0c;现场可编程门阵列&#xff09;与ASIC&#xff08;Application-Specific Integrated Circuit&#xff0c;专用集成电路&#xff09;是两种截然不同的芯片设计策略&#xff0c;各自在…

短视频矩阵系统,一键智能成片

在信息爆炸的时代&#xff0c;短视频以其短平快的特点迅速崛起&#xff0c;成为人们获取信息、娱乐消遣的重要渠道。然而&#xff0c;如何在这个竞争激烈的领域中脱颖而出&#xff0c;制作出吸引眼球的爆款视频呢&#xff1f;今天&#xff0c;我们就来揭秘一款神奇的短视频矩阵…

76.WEB渗透测试-信息收集- WAF、框架组件识别(16)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;75.WEB渗透测试-信息收集- WAF、框架组件识别&#xff08;15&#xff09; Php的Laraverl…

C语言 之 理解指针(4)

文章目录 1. 字符指针变量2. 数组指针变量2.1 对数组指针变量的理解2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用 5. 函数指针数组 1. 字符指针变量 我们在前面使用的主要是整形指针变量&#xff0c;现在要学…

php--高级反序列化

&#x1f3bc;个人主页&#xff1a;金灰 &#x1f60e;作者简介:一名简单的大一学生;易编橙终身成长社群的嘉宾.✨ 专注网络空间安全服务,期待与您的交流分享~ 感谢您的点赞、关注、评论、收藏、是对我最大的认可和支持&#xff01;❤️ &#x1f34a;易编橙终身成长社群&#…

21 Python常用内置函数——zip()

zip() 函数用来把多个可迭代对象中的元素压缩到一起&#xff0c;返回一个可迭代的 zip 对象&#xff0c;其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组&#xff0c;最终结果中包含的元素个数取决于所有参数序列或可迭代对象中最短的那个。 可以这样理解这个函…

学习笔记(数据结构:队列)4

qt加库 队列&#xff1a; 队列是只允许在一段进行插入&#xff0c;而在另一端进行删除操作的线性表。 允许插入的称谓队尾&#xff0c;允许删除的一端队头。 顺序队列。 循环队列&#xff0c; 常用操作&#xff0c;入队&#xff0c;出队。 先进先出&#xff0c;FIFO 用&#x…

安装nfs和rpcbind设置linux服务器共享磁盘

1、安装nfs和rpcbind 1.1 检查服务器是否安装nfs和rpcbind&#xff0c;执行下命令&#xff0c;检查服务器是否安装过。 rpm -qa|grep nfs rpm -qa|grep rpcbind 说明服务器以安装了&#xff0c;如果没有就需要自己安装 2、安装nfs和rpcbind 将rpm安装包&#xff1a; libtirpc-…

【kubernetes】认识K8S基础理论

目录 1.背景 2.虚拟机、物理机与容器 3.K8S 基本概念 3.1 K8S 的特点 4.Kubernetes 集群架构与组件 4.1 核心组件 4.1.1 Master组件 4.1.2 配置存储中心 4.1.3 Node 组件 5.Kubernetes 核心概念 6.总结 1.背景 服务器经历了三次演变过程&#xff1a;物理机、虚拟机…

【北京迅为】《i.MX8MM嵌入式Linux开发指南》-第三篇 嵌入式Linux驱动开发篇-第五十八章 中断下文之tasklet

i.MX8MM处理器采用了先进的14LPCFinFET工艺&#xff0c;提供更快的速度和更高的电源效率;四核Cortex-A53&#xff0c;单核Cortex-M4&#xff0c;多达五个内核 &#xff0c;主频高达1.8GHz&#xff0c;2G DDR4内存、8G EMMC存储。千兆工业级以太网、MIPI-DSI、USB HOST、WIFI/BT…

跨越至智慧水利新时代:以科技创新为核心引擎,全面构建智能化水资源管理体系,显著提升水资源治理的智能化水平与高效治理能力,共筑可持续水生态未来

目录 一、智慧水利的概念与重要性 &#xff08;一&#xff09;智慧水利的概念 &#xff08;二&#xff09;智慧水利的重要性 二、智慧水利的关键技术 &#xff08;一&#xff09;物联网技术 &#xff08;二&#xff09;大数据技术 &#xff08;三&#xff09;云计算技术 …