位置: IT常识 - 正文

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

发布时间:2024-01-14
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)

  • 苹果手机投影到墙上怎么弄(苹果手机投影到电脑)

    苹果手机投影到墙上怎么弄(苹果手机投影到电脑)

  • 华为nova4手机进水充电口闪屏(华为nova4手机进不了主题设置)

    华为nova4手机进水充电口闪屏(华为nova4手机进不了主题设置)

  • 交通中国etc怎么激活(交通中国etc怎么打开蓝牙)

    交通中国etc怎么激活(交通中国etc怎么打开蓝牙)

  • 华为路由器ipv6是什么意思啊(华为路由器IPV6防火墙)

    华为路由器ipv6是什么意思啊(华为路由器IPV6防火墙)

  • oppo旗下有什么品牌(oppo旗下的)

    oppo旗下有什么品牌(oppo旗下的)

  • 苹果se是不是双卡双待(新一代iphone se是双卡双待吗)

    苹果se是不是双卡双待(新一代iphone se是双卡双待吗)

  • 雷蛇15寸采用什么显卡(雷蛇16寸)

    雷蛇15寸采用什么显卡(雷蛇16寸)

  • 显卡跑分突然低了很多怎么办

    显卡跑分突然低了很多怎么办

  • 录音设备被占用是怎么回事(录音设备被占用或出现异常怎么办)

    录音设备被占用是怎么回事(录音设备被占用或出现异常怎么办)

  • mx350是什么水平(mx350相当)

    mx350是什么水平(mx350相当)

  • 电脑微信按住说话在哪(电脑微信按住说话)

    电脑微信按住说话在哪(电脑微信按住说话)

  • 华为matebook保修多久(华为matebook保修政策)

    华为matebook保修多久(华为matebook保修政策)

  • 什么叫拒绝式服务攻击(什么叫拒绝式服务)

    什么叫拒绝式服务攻击(什么叫拒绝式服务)

  • 办理手机卡需要什么(办理手机卡需要满18周岁吗)

    办理手机卡需要什么(办理手机卡需要满18周岁吗)

  • 芒果tv学生会员怎么弄(芒果tv学生会员不小心取消了)

    芒果tv学生会员怎么弄(芒果tv学生会员不小心取消了)

  • vivo安全认证在哪里(vivo安全验证需要登录vivo账号)

    vivo安全认证在哪里(vivo安全验证需要登录vivo账号)

  • 显示器重影自修方法(显示器重影自修要多久)

    显示器重影自修方法(显示器重影自修要多久)

  • 抖音注销对方显示什么(抖音注销后别人马上就看不到我了)

    抖音注销对方显示什么(抖音注销后别人马上就看不到我了)

  • 相机入门基础知识(相机入门知识从零开始)

    相机入门基础知识(相机入门知识从零开始)

  • wps合并居中的快捷键是(wps合并居中的快捷键 excel)

    wps合并居中的快捷键是(wps合并居中的快捷键 excel)

  • 华为p20设置来电视频(华为p20怎么设置来电秀)

    华为p20设置来电视频(华为p20怎么设置来电秀)

  • 华为提示灯怎么开启(华为提示灯颜色怎么设置)

    华为提示灯怎么开启(华为提示灯颜色怎么设置)

  • 手机明明有信号,为什么没有网络(手机明明有信号为什么别人打我电话关机)

    手机明明有信号,为什么没有网络(手机明明有信号为什么别人打我电话关机)

  • 文件上传漏洞及绕过检测的方式(文件上传漏洞及解决方案)

    文件上传漏洞及绕过检测的方式(文件上传漏洞及解决方案)

  • 前端FileReader对象实现图片file文件转base64(前端file对象)

    前端FileReader对象实现图片file文件转base64(前端file对象)

  • java变量的初始化(java中的变量)

    java变量的初始化(java中的变量)

  • 公司车保险费用高么
  • 商誉 会计
  • 企业所得税季末数怎么填
  • 利润表的税金及附加是计提数还是实缴数
  • 外购商品发给职工如何做账
  • 合伙企业法人股东
  • 什么发票可以抵扣增值税
  • 临时设施摊销方案怎么写
  • 出口退税进项发票认证勾选
  • 开模费用计入什么科目
  • 收到供应商赠送的发票
  • 养老基金利率多少
  • 自建生产用机器设备领用本企业生产的产品
  • 投资公司的投资人叫什么
  • 周转材料低值易耗品摊销
  • 技术转让收入是指当事人履行
  • 从境外取得的佣金
  • 换汇成本跟进项有关系吗
  • 保险公司如何计算车辆折旧
  • 企业员工差旅平台排行
  • 资本化利息金额
  • 普惠性税收优惠政策包括
  • windows10如何开启wifi
  • 鸿蒙系统怎么开启开发者权限
  • u盘中病毒了怎么格式化
  • mac版本系统
  • 企业帐薄包括哪些
  • 错账缴回的银行会计分录
  • 资产评估增值额
  • vue3 超好用的富文本编辑器
  • 仓储服务和不动产租赁
  • 运输公司的账务处理
  • 产品出库单附在什么凭证后面
  • chat gpt 国内版免费手机
  • 推荐 4个有趣实践作业
  • 一分钟玩转钉钉文档是什么东西
  • vue区别
  • ps打不了字只显示一个点怎么办
  • 开发商需要缴纳保证金
  • js原型链的用处
  • 帝国cms移动端
  • 不符合无形资产摊销条件
  • 怎么导出银行去银行流水
  • 固定资产管理台账
  • 一般纳税人企业所得税怎么征收
  • 管理费用处理的是
  • 缴纳以前年度房租的税
  • 用公司名义买的东西送礼需要归还么
  • 私车公用协议可以过户吗
  • 金银首饰以旧换新会计处理
  • 开公司的车出差违章算谁的
  • 转出未交增值税最终怎么转平
  • 委托收款背书和质押背书都属于转让背书
  • 甲方代交水电费合法吗
  • 企业凭证处理流程图
  • 应收账款周转率计算公式
  • mysql中的查询
  • 查看mysql执行sql日志内容
  • mysql数据库自动重启
  • sqlserver高可用集群搭建
  • 最全的sql执行顺序
  • sqlserver完全删除
  • mysql57服务无法启动,找不到文件夹
  • qttask.exe是什么进程?qttask.exe是不是病毒?
  • linux安装gdb命令
  • nmeo.exe是什么
  • dpd参数
  • 驱动人生公司怎么样
  • ubuntu14.04.6安装教程
  • 如何使用node.js
  • css+div布局的常用方法
  • bgm背景
  • android中常用的adapter不包括
  • 国家税务总局全国增值税查询
  • 网上税务营业厅
  • 江苏国税电子税务局开票流程
  • 电子税务局如何解绑办税人员
  • 国网四川电力客户电话号码
  • 浙江电子税务局app
  • 税务稽查审理的基本原则
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号