位置: 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)

  • 公众小号怎样在短期内力挽狂澜,吸粉破万?(公众小号怎样在抖音直播)

    公众小号怎样在短期内力挽狂澜,吸粉破万?(公众小号怎样在抖音直播)

  • 微信手机号添加怎么设置(微信手机号添加好友显示账号异常)

    微信手机号添加怎么设置(微信手机号添加好友显示账号异常)

  • 快手公会如何申请(快手公会入驻申请)

    快手公会如何申请(快手公会入驻申请)

  • 苹果x与11的区别(苹果x和11一样吗)

    苹果x与11的区别(苹果x和11一样吗)

  • 抖音可以手机电脑同时登录一个号吗(抖音可以手机电影直播吗)

    抖音可以手机电脑同时登录一个号吗(抖音可以手机电影直播吗)

  • 荣耀20pro如何卸载软件(荣耀20pro怎么删除系统安装包)

    荣耀20pro如何卸载软件(荣耀20pro怎么删除系统安装包)

  • 华为手机黑白屏怎么调回彩色(华为手机黑白屏了怎么恢复正常使用)

    华为手机黑白屏怎么调回彩色(华为手机黑白屏了怎么恢复正常使用)

  • 抖音视频发微信怎么发不了完整视频(抖音视频发微信怎么发)

    抖音视频发微信怎么发不了完整视频(抖音视频发微信怎么发)

  • 微信图片已过期或被清理怎么恢复(微信图片已过期或已被清理是什么意思)

    微信图片已过期或被清理怎么恢复(微信图片已过期或已被清理是什么意思)

  • 语音通话一小时消耗多少流量(语音一个小时)

    语音通话一小时消耗多少流量(语音一个小时)

  • 爱奇艺vip一个月怎么算(爱奇艺VIP一个月是六元吗)

    爱奇艺vip一个月怎么算(爱奇艺VIP一个月是六元吗)

  • 天猫精灵没声音怎么办(天猫精灵没声音了怎么办)

    天猫精灵没声音怎么办(天猫精灵没声音了怎么办)

  • 微信未成年限额多少(微信未成年限额了怎么办钱转出来)

    微信未成年限额多少(微信未成年限额了怎么办钱转出来)

  • 怎么在两个表格中找出相同的部分(怎么在两个表格之间打字)

    怎么在两个表格中找出相同的部分(怎么在两个表格之间打字)

  • 微型计算机主机由什么组成(微型计算机主机的硬件除cpu外还有什么)

    微型计算机主机由什么组成(微型计算机主机的硬件除cpu外还有什么)

  • iphone7机身多长(苹果7s机身多长)

    iphone7机身多长(苹果7s机身多长)

  • oppor15有多少厘米(oppo r15多少厘米)

    oppor15有多少厘米(oppo r15多少厘米)

  • qq语音自动转文字怎么开(qq语音自动转文字)

    qq语音自动转文字怎么开(qq语音自动转文字)

  • 天猫八八会员怎么开通(天猫88会员8.8元)

    天猫八八会员怎么开通(天猫88会员8.8元)

  • 小米9pro震动在哪里设置(小米9手机震动强度调节)

    小米9pro震动在哪里设置(小米9手机震动强度调节)

  • 淘宝账户违规多久恢复(淘宝帐户违规了还能用吗)

    淘宝账户违规多久恢复(淘宝帐户违规了还能用吗)

  • 抖音怎么拒绝别人艾特(抖音怎么拒绝别人访问主页)

    抖音怎么拒绝别人艾特(抖音怎么拒绝别人访问主页)

  • 三星如何强制关机(三星如何强制关闭旁白)

    三星如何强制关机(三星如何强制关闭旁白)

  • 荣耀20pro耳机孔在哪(荣耀20i耳机孔)

    荣耀20pro耳机孔在哪(荣耀20i耳机孔)

  • 手机号码被拉黑打电话提示什么(手机号码被拉黑打电话过去什么提示)

    手机号码被拉黑打电话提示什么(手机号码被拉黑打电话过去什么提示)

  • 小红书如何申请会员(小红书如何申请视频号)

    小红书如何申请会员(小红书如何申请视频号)

  • KB4507450安装失败如何解决(kb4592440安装失败)

    KB4507450安装失败如何解决(kb4592440安装失败)

  • 拍卖公司没开发票违法吗
  • 小规模纳税人公户的钱怎么转出来
  • 偶然所得代扣代缴义务人
  • 增值税是如何计提的
  • 个体工商户每月需要申报个税吗
  • 减免增值税申报表
  • 电器电子产品及配件入账
  • 长期股权投资审计说明
  • 没有发票不能税前扣除,所以年底结账前需要检查
  • 汇算清缴职工福利支出
  • 代理进口业务
  • 印花税已经缴纳了但是还未申报
  • 税控盘这个月没有反写会怎么样
  • 计提所得税是在哪个科目
  • 免租与转租分别什么意思
  • 长租押金多少合适
  • 计提房产税的会计分录怎样做
  • 专票电话写错了怎么办
  • 机械租赁有什么机械
  • 支付装修款
  • windows10专业
  • 取得进项税发票分录
  • 股份制企业是什么
  • 收到货款发票怎么记账
  • linux怎么查找
  • 只交社保不发工资可以吗
  • 固定资产公允价值变动会计处理
  • 格雷厄姆岛
  • 克洛格森林大克洛格
  • 如何理解土地使用制度
  • 未开票收入不申报处罚
  • 高新技术企业取消资格怎么处罚
  • iis搭建网站教程win10
  • sudo命令功能
  • windows刻录cd
  • 去哪儿网发票能不能不开旅游
  • 收到借款利息收入的会计分录怎么做账
  • 补充医疗相关政策
  • 使用命令方式安装程序
  • 开了红字信息表对方没开红票
  • 购进已经折旧提完的二手车
  • sql2000错误9003
  • sql chr函数
  • 小规模购进原材料可以抵扣税金吗
  • 税控服务费全额抵扣申报怎么填
  • mysql安装问题
  • 税控系统技术维护费全额抵扣分录
  • 企业所得税弥补亏损怎么弥补
  • 公司公账转私账违法吗
  • 寄售商店代销寄售物品的税率
  • 一台设备分期开票数量
  • 已认证抵扣的进项税额怎么填报表
  • 权益净利率计算公式产权比率
  • 在建工程项目包括
  • sql server批量导入数据
  • windows8crazy error
  • 软碟通可以制作uefi启动盘吗
  • Win10 Mobile RS2预览版14951升级遭遇卡在0%的解决办法
  • linux集群的作用和意义
  • win10系统自带输入法怎么关闭
  • 如何把win7系统复制到u盘里
  • Win10锁屏壁纸怎么换
  • 如何在linux shell关闭443端口
  • Win10 Mobile 14283红石预览版有哪些机型可以安装?
  • iptables防火墙规则
  • [置顶]马粥街残酷史
  • 苹果手机如何给视频添加字幕
  • android 游戏平台
  • python数值计算基础
  • 表单元素的基本语法
  • opencv for linux
  • android图库
  • javascript学习指南
  • jquery插件是干什么的
  • jqueryapi手机版
  • 国家税务局关于印花税若干具体问题的规定
  • 棚改房办房产证用不用交费
  • 电子客票号码8768是什么
  • 厦门税务查询地址不符怎么处理
  • 税控盘怎么看收入
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设