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

  • OPPO Ace2支持红外线功能吗(oppo ace2有没有红外线)

    OPPO Ace2支持红外线功能吗(oppo ace2有没有红外线)

  • 手机mmi设置成功是什么意思(手机设置midi)

    手机mmi设置成功是什么意思(手机设置midi)

  • 墨迹天气打不开怎么回事(墨迹天气为啥不自动更新了?)

    墨迹天气打不开怎么回事(墨迹天气为啥不自动更新了?)

  • 手机外屏和内屏摔坏的区别(手机外屏和内屏之间脱胶怎么办)

    手机外屏和内屏摔坏的区别(手机外屏和内屏之间脱胶怎么办)

  • pe在电路中代表什么(在电源电路中pe表示什么线?)

    pe在电路中代表什么(在电源电路中pe表示什么线?)

  • 华为nova7可以用4G卡吗(华为nova7可以用44瓦快充吗)

    华为nova7可以用4G卡吗(华为nova7可以用44瓦快充吗)

  • 电话拉黑后打过去是怎样的(电话拉黑后打过去对方有提示吗)

    电话拉黑后打过去是怎样的(电话拉黑后打过去对方有提示吗)

  • 苹果7p来电闪光灯怎么设置(苹果7p来电闪光灯怎么开启)

    苹果7p来电闪光灯怎么设置(苹果7p来电闪光灯怎么开启)

  • 华为手机qq闪照已销毁怎么恢复(华为手机qq闪照在哪个文件夹里面)

    华为手机qq闪照已销毁怎么恢复(华为手机qq闪照在哪个文件夹里面)

  • 手机换了外屏后遗症(手机换了外屏后指纹解锁不能用)

    手机换了外屏后遗症(手机换了外屏后指纹解锁不能用)

  • 拨打的电话暂停服务是什么意思(拨打的电话暂停服务是怎么回事?)

    拨打的电话暂停服务是什么意思(拨打的电话暂停服务是怎么回事?)

  • 华为荣耀9x有没有录屏功能(华为荣耀9X有没有nfc功能怎么打开)

    华为荣耀9x有没有录屏功能(华为荣耀9X有没有nfc功能怎么打开)

  • 苹果11有屏上指纹吗(苹果11有屏下指纹)

    苹果11有屏上指纹吗(苹果11有屏下指纹)

  • 华为拍照用哪个分辨率(华为拍照用哪个软件好)

    华为拍照用哪个分辨率(华为拍照用哪个软件好)

  • 买家号降权多久会恢复(买家号降权了可以注销吗)

    买家号降权多久会恢复(买家号降权了可以注销吗)

  • 软件缓存是什么意思,可以删除吗(手机软件缓存是什么)

    软件缓存是什么意思,可以删除吗(手机软件缓存是什么)

  • 微博通讯录好友在哪里(微博通讯录好友现在怎么找不到了)

    微博通讯录好友在哪里(微博通讯录好友现在怎么找不到了)

  • 打开微信才能收到消息怎么办(打开微信才能收到微信视频)

    打开微信才能收到消息怎么办(打开微信才能收到微信视频)

  • 手机相机权限怎么开启(手机的相机权限)

    手机相机权限怎么开启(手机的相机权限)

  • xr的双卡双待怎么插(xr的双卡双待怎么关闭)

    xr的双卡双待怎么插(xr的双卡双待怎么关闭)

  • Win10 20H2更新报错怎么办 Win10 20H2更新错误的9种解决方法(window1020h2更新问题)

    Win10 20H2更新报错怎么办 Win10 20H2更新错误的9种解决方法(window1020h2更新问题)

  • Linux使用文本浏览器lynx并显示中文的方法(linux怎么打开文本文件)

    Linux使用文本浏览器lynx并显示中文的方法(linux怎么打开文本文件)

  • 个体户如何报税步骤
  • 实收资本多长时间缴纳完?
  • 公司承担个税的账务处理
  • 预收款增值税纳税义务发生时间与确认收入时间
  • 其他业务收入冲应收账款
  • 一般纳税人普票怎么做分录
  • 所得税的利润总额怎么计算
  • 团队接待的程序及标准
  • 应交增值税减免税额
  • 进项转出再差额征收待抵扣
  • 库存现金多了是什么原因
  • 代扣代缴企业所得税申报期限
  • 残料的会计分录
  • 行政相对人和行政管理相对人的区别
  • 分支机构的固定资产转移如何处理?
  • 企业拥有房产每年如何交税
  • 异地劳务公司所在地怎么交税
  • 建筑公司开劳务票税点是多少
  • 其他货币资金包括存出保证金吗
  • 决算帐表不相符怎么处理
  • 打包贷款和出口信贷的区别和联系
  • 银行存款利息的计算方法
  • 应付的职工薪酬
  • window休眠
  • 如何在excel中链接图片对方能显示
  • mac 移动硬盘 文件系统
  • 怎么获得win10纯净版
  • linux bt命令
  • scm wms
  • linux源码安装软件的方法介绍
  • 材料分配的四个步骤
  • 报错500是什么意思
  • 阿尔比恩洞的级别
  • pc端微信扫码支付
  • 在Windowsserver2019环境下,配置IP地址使用
  • thinkphp3.0
  • php 替换
  • 如何理解虚拟存储的虚拟
  • lstm crf
  • critical_section 结构
  • 企业转租电费发票
  • 出租房屋收取跨年度的预收租金收入
  • phpcms api
  • 中医经营范围,营业执照怎么写
  • 公司支付款项制度
  • 个人所得税中的速算扣除数是什么意思
  • 增值税中进项税额转出是什么意思
  • 个人所得税手续费奖励办税人员文件
  • 应发工资账务处理
  • 免税的发票什么样子
  • 内账税金如何做分录
  • 电费发票开据后如何入帐?
  • 09年前的固定资产
  • 公交卡充值发票怎么开
  • 小规模纳税人能开专票吗2023
  • 企业注销固定资产清理税务处理
  • 收到不是股东的现金
  • 新开企业去银行开户需要什么
  • 营业成本包括哪些会计科目
  • 国企背书是什么意思
  • sqli
  • mysql批量更新多条数据
  • 强制结束进程命令快捷键
  • ubuntu20.04升级20.10
  • u盘装win8系统教程图解
  • win10微软在哪
  • find.exe应用程序错误
  • 索尼笔记本安装软件顺序
  • [置顶] 《翻身称霸》
  • bootstrap制作的网站页面
  • nodejs tcp
  • js的调试
  • 按钮点击后消失
  • 纳税工会经费申请怎么写
  • 百旺金赋跨月专票作废
  • 深圳增值税勾选平台网址
  • 政府收回土地条件
  • 3%增值税专用发票成本多少钱
  • 国家土地征收管理办法
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设