位置: IT常识 - 正文

React--》一些不常见的hook函数讲解(react.strictmode)

编辑:rootadmin
React--》一些不常见的hook函数讲解

目录

Hook函数

useImperativeHandle

useLayoutEffect和useInsertionEffect与useEffect区别

useDebugValue

useDeferredValue

useTransition


Hook函数

推荐整理分享React--》一些不常见的hook函数讲解(react.strictmode),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:react either,react_,react 问题,react有什么坑点,react有什么坑点,react 问题,react bus,react 问题,内容如对您有帮助,希望把文章链接给更多的朋友!

关于React中的钩子函数,在我之间的文章中讲解完我们已经非常熟悉了,钩子函数的功能非常强大而它使用又十分简单。关于钩子函数的使用,我们只需记住两点:

1)钩子函数只能在react组件和自定义钩子中使用

2)钩子函数不能再嵌套函数或其他语句(if、switch、white、for等)中使用

接下来开始介绍一些在日常开发中不是那么常用的钩子函数,但是在某个时刻可能你需要用到它:

useImperativeHandle

你可以设置一个场景,父子组件相互传递值和方法对你来说都没有任何问题,但是我想让你直接去修改子组件的某个dom元素的值呢?一开始你是不是有点懵不知道如何下手,react官方给我们提供了一个钩子函数 useImperativeHandle 专门解决这个问题。具体的介绍可以参考 官方文档 这里仅仅提供一个案例。

修改子组件中的 h2 标题内容,可以在该组件中通过forwardRef来指定要暴露给外部组件的ref

import React, { useEffect, useRef, useState } from 'react'const App = () => { const [count,setCount] = useState(0) const ChildRef = useRef() const addCount = () =>{ setCount(pre => pre+1) } useEffect(()=>{ ChildRef.current.innerText = 'Child' + count }) return ( <div> <h2>App根组件--{count}</h2> <button onClick={addCount}>+1</button> <Child ref={ChildRef} /> </div> )}// 定义一个App子组件const Child = React.forwardRef((props,ref) =>{ return ( <div> <h3 ref={ref}>Child子组件</h3> </div> )})export default App

这种 forwardRef 向外直接暴露ref虽然能够达到一些效果,但是有点不安全,让子组件的dom元素直接脱离子组件本身掌控,由别的组件进行掌握,这让代码也变得难以维护,所以这种方法虽然可行但是不是很可取,所以我们需要更为合适的 useImperativeHandle 钩子函数来处理,如下:

如果父组件想修改子组件中的数据的话,也可以调用子组件中的方法,如下:

import React, { useEffect, useImperativeHandle, useRef, useState } from 'react'const App = () => { const [count,setCount] = useState(0) const ChildRef = useRef() const addCount = () =>{ setCount(pre => pre+1) } useEffect(()=>{ ChildRef.current.changeInputValue(count) }) return ( <div> <h2>App根组件--{count}</h2> <button onClick={addCount}>+1</button> <Child ref={ChildRef} /> </div> )}// 定义一个App子组件const Child = React.forwardRef((props,ref) =>{ const myRef = useRef() useImperativeHandle(ref,()=>{ return { changeInputValue(val){ myRef.current.value = val } } }) return ( <div> <h3>Child子组件</h3> <input ref={myRef} type="text" /> </div> )})export default App

useLayoutEffect和useInsertionEffect与useEffect区别React--》一些不常见的hook函数讲解(react.strictmode)

在了解这三者的区别之前,我们应该知道他们的执行时机分别在哪一时刻,如下:

useLayoutEffect:useLayoutEffect的方法签名和useEffect一样,功能也类似,不同的是其执行时机比useEffect要早,其会在DOM改变后调用,useLayoutEffect使用场景不多,在实际开发中在其要修改元素样式且使用useEffect会出现闪烁现象时可以使用该钩子函数进行替换,当然这种情况在react18版本之前的差异性比较明显,而到了react18之后两者的差异几乎是没有了,这里简单提及一下。

当然,我还是推荐大家使用经典的useEffect,当你的项目使用useEffect而遇到一些问题之后,也可以考虑一下是否是执行时机的问题,这里的话就可以使用另外两个钩子函数了。

useDebugValue

介绍一个类似于玩具的钩子函数,用来给自定义钩子设置标签,标签会在react开发者工具中显示,用来调试自定义钩子,但是不常用,如下:

会在开发者工具中对自定义钩子进行标识,作用嘛为了后期的代码调试,但是我感觉作用不大,大家了解一下即可:

useDeferredValue

useDeferredValue用来设置一个延迟的state,比如我们创建一个state,并使用useDeferredValue获取延迟值。延迟值可以使用在这样一个场景中,一个state需要在多个组件中使用,但是一个组件渲染比较快另一个组件渲染比较慢,这样我们可以为该state创建一个延迟值,渲染组件快的组件使用正常的state优先显示,渲染慢的组件使用延迟值慢一步渲染,当然这里必须结合React.memo或useMemo才能发挥其作用,不了解这两个函数的可以先参考我之前的文章对其的讲解:React组件变化每次都会导致重新渲染,如何解决?,现在开始着重讲解这个钩子函数的使用

具体操作可参考官方示例:

useTransition

当我们在组件中修改state时,会遇到复杂一些的state,当修改这些state时,甚至会阻塞到整个应用的运行,为了降低这种state的影响,react为我们提供了useTransition,通过useTransition可以降低setState的优先级。

useTransition会返回一个数组,数组中有两个元素,第一个元素是isPending,它是一个变量用来记录transition是否在执行中,第二个元素是startTransition,它是一个函数,可以将setState在其回调函数中调用,这样setState方法会被标记为transition并不会立即执行,而是在其他优先级更高的方法执行完毕才会执行。

还有一个钩子函数为useId:生成唯一id,使用于需要唯一id的场景,但是适用于列表的key,这里简单的提一下。

本文链接地址:https://www.jiuchutong.com/zhishi/295265.html 转载请保留说明!

上一篇:Vue3中样式渗透:deep()为什么无效(vue的样式穿透)

下一篇:Vue常见错误---Error in mounted hook(vue err)

  • 如何用微信公众号打造一篇阅读量100000+的微信文章(如何用微信公众号收费)

    如何用微信公众号打造一篇阅读量100000+的微信文章(如何用微信公众号收费)

  • 华为蓝牙耳机怎么配对苹果(华为蓝牙耳机怎么恢复出厂设置)

    华为蓝牙耳机怎么配对苹果(华为蓝牙耳机怎么恢复出厂设置)

  • vsphere storage vmotion的作用

    vsphere storage vmotion的作用

  • 如何查看别人音浪(在哪里可以看到别人的音浪)

    如何查看别人音浪(在哪里可以看到别人的音浪)

  • ipad第六代可以用pencil吗(ipad第六代可以用电容笔吗)

    ipad第六代可以用pencil吗(ipad第六代可以用电容笔吗)

  • 拼多多如何筛选发货地(拼多多如何筛选发货地址)

    拼多多如何筛选发货地(拼多多如何筛选发货地址)

  • spss安装不上怎么回事(spss22安装不了)

    spss安装不上怎么回事(spss22安装不了)

  • lgv30和lgv30+区别

    lgv30和lgv30+区别

  • 苹果6手机屏幕不停闪烁(苹果6手机屏幕失灵是什么原因)

    苹果6手机屏幕不停闪烁(苹果6手机屏幕失灵是什么原因)

  • 加微信显示对方拒绝接收你的消息(加微信显示对方被加好友过于频繁)

    加微信显示对方拒绝接收你的消息(加微信显示对方被加好友过于频繁)

  • 录屏在哪里找(手机录屏在哪里找)

    录屏在哪里找(手机录屏在哪里找)

  • 爱奇艺下载电视剧怎么下载(爱奇艺下载电视剧怎么传给别人)

    爱奇艺下载电视剧怎么下载(爱奇艺下载电视剧怎么传给别人)

  • 微信一闪一闪是咋回事(微信一闪一闪是什么意思)

    微信一闪一闪是咋回事(微信一闪一闪是什么意思)

  • 微信可以注册几个公众号(微信可以注册几个王者号)

    微信可以注册几个公众号(微信可以注册几个王者号)

  • 广域网和局域网的本质区别(广域网和局域网的分类是以什么来划分的)

    广域网和局域网的本质区别(广域网和局域网的分类是以什么来划分的)

  • 网卡驱动卸载了怎么还原(网卡驱动卸载了怎么办)

    网卡驱动卸载了怎么还原(网卡驱动卸载了怎么办)

  • qq音乐会员可以共享吗(qq音乐会员可以退款吗)

    qq音乐会员可以共享吗(qq音乐会员可以退款吗)

  • wps两个ppt怎么合并(wps两个ppt怎么合起来)

    wps两个ppt怎么合并(wps两个ppt怎么合起来)

  • 滴滴对公和不对公区别(滴滴对公和不对公派单区别)

    滴滴对公和不对公区别(滴滴对公和不对公派单区别)

  • rx470显卡什么档次(rx470graphics显卡怎样)

    rx470显卡什么档次(rx470graphics显卡怎样)

  • 360摄像机离线怎样重连(360摄像机离线怎么办)

    360摄像机离线怎样重连(360摄像机离线怎么办)

  • v8声卡连接电脑设置(v8声卡连接电脑教程)

    v8声卡连接电脑设置(v8声卡连接电脑教程)

  • iphonexs无法蓝牙配对(苹果xs蓝牙打不开)

    iphonexs无法蓝牙配对(苹果xs蓝牙打不开)

  • dom-to-image(dom-to-image原理)

    dom-to-image(dom-to-image原理)

  • Python中选择结构是什么(python中选择结构也称为什么)

    Python中选择结构是什么(python中选择结构也称为什么)

  • 企业所得税当年销售收入
  • 劳务公司一般纳税人可以抵扣进项税吗
  • 公司每月支出
  • 缴纳增值税会计处理
  • 收入与支出怎么算利润率
  • 购销合同印花税怎么算
  • 小规模纳税人水电费税率
  • 企业亏损法定盈亏是什么
  • 企业减免的所得税税率
  • 企业无形资产摊销表述不正确
  • 哪些营业外收入需要缴纳增值税
  • 新会计准则要求
  • 营改增后纳税人可以使用的发票种类
  • 广告公司税收分析
  • 坏账损失计入什么费用
  • 管理不善造成的损失怎么处理
  • 上月未抵扣进项增值税
  • 财产保险费计入什么科目
  • 加权平均数是什么意思的权
  • 遇到境外网络勒索敲诈怎么办
  • 负债判断
  • 材料验收入库会计分录怎么写计划成本法
  • 农副产品的进项税额
  • 工资薪金支出的扣除标准
  • 六税两费减半会延期吗
  • 在win7中,当前窗口的数量是多少个
  • 财务报表包括哪几个表
  • win8操作系统
  • php生成唯一标识
  • 升级w10系统
  • .exe是啥
  • 代垫运费会计分录怎么写
  • 增值税专用发票有几联?
  • mgaqdesk.exe进程有什么作用 mgaqdesk进程查询
  • 补缴的土地出让金需要计提吗
  • 营改增几个阶段
  • 前端 input
  • 收到的国家电网电话
  • javaweb购物车设计报告
  • 快速傅里叶变换matlab
  • 2023年我要实现的目标是
  • rm -rf/指令指删除什么
  • 发票章没有盖好
  • 外贸退税是算利率吗
  • 收到退回的企业所得税分录
  • 哪些行业不用交税
  • 土石方收据图片
  • 城建税和教育附加税怎么算
  • 会计付租金会计分录
  • 其他债权投资如何计提减值
  • 装修费还没摊销怎么办
  • 可供出售权益工具公允价值的增加计入当期损益吗
  • 在建工程里面的费用最后怎样结转
  • 增值税期末留抵税额是什么意思
  • 湖南残保金优惠政策
  • 公司账户没有钱怎么发工资
  • 车辆购置税是怎么计算的
  • 分期付款购无形资产怎么入账?
  • 怎样理解企业财务会计的定义
  • 首先要知道什么英语
  • 来料加工费用价格表
  • 出纳建账账户名称怎么写
  • mysql允许字段为空
  • xp系统电脑设置在哪
  • os x10.11el capitan公测版beta2官方下载地址
  • win10系统怎么关闭自动更新
  • win7系统如何关闭开机自动启动软件
  • centos基础命令
  • linux 压缩rar
  • 跑跑3s是谁
  • JavaScript Math.ceil() 函数使用介绍
  • linux管道定义
  • 网页制作css样式
  • linux sed awk区别
  • shell脚本编程100例
  • 有关javascript的书
  • 如何建立守信联系
  • 莅临指导和莅临交流的区别
  • 大同县税务局
  • 企业需要缴纳哪些费用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设