react hook

2023-11-13

一:hook的定义

Hook 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。

二:使用react hook的好处

1.使用类组件,相关逻辑的代码会被分割到不同生命周期函数中,比如订阅监听与解绑 ,需要在 componentDidMount 中注册监听,而却需要在componentWillUnMount中解绑。相关逻辑的代码被拆分到了不同的生命周期函数中,而毫无关联的代码又被放在同一个生命周期函数中(比如获取数据以及注册监听都会放到componentDidMount中),使用hook可以很好的优化这一问题,可以将不同逻辑的代码分开,相同逻辑的代码放到一起。

2.使用hook可以简化开发者的工作,使用hook,开发者可以不用理解javaScript中的this ,也不同给函数绑定this。

三:hook 以及作用

1.useState

使用示例:

const [state, setState] = useState(initialState);

useState接受初始值或者 函数(返回初始值) , 返回一个state以及更新state的函数

setState 函数用于更新 state。它接收一个新的 state 值并将组件的一次重新渲染加入队列

setState(newState);

函数式更新

如果新的state需要通过先前的state计算得出,则传递给setState一个函数,该函数接受原来的state作为参数,返回新的state,下面的例子展示了setState的两种用法

function Counter({initialCount}) {
  const [count, setCount] = useState(initialCount);
  return (
    <>
      Count: {count}
      <button onClick={() => setCount(initialCount)}>Reset</button>
      <button onClick={() => setCount(prevCount => prevCount - 1)}>-</button>
      <button onClick={() => setCount(prevCount => prevCount + 1)}>+</button>
    </>
  );
}

如果你的更新函数返回值与当前 state 完全相同,则随后的重渲染会被完全跳过。

2.useEffect

使用示例:

// 相当于componentDidMount
useEffect(()=>{
  // ...
},[])

//相当于componentDidMount + componentDidUpdate
useEffect(()=>{
  ...
})

// 相当于componentWillUnmount
useEffect(()=>{
  ...

  return () => {
     
  }
},[])

3.useCallback 和useMemo

useCallback和useMemo都是做优化工作的

它们的不同点:

useCallback useMemo
返回值 一个缓存的函数 一个缓存值
参数 需要缓存的函数以及依赖 需要缓存的值以及依赖
使用场景

父子组件之间的优化

父组件传给子组件的props中有函数,当父组件更新时,函数会重新生成,函数的引用会改变,子组件的props会改变导致子组件重新渲染。使用useCallback可以将函数缓存下来,只有当依赖项改变时才会重新生成函数,依赖项没改变时会返回上一次的缓存函数,子组件的props就不会改变,子组件就不会重新渲染,以此提高了效率

单个组件的优化

有一些计算并不是组件每次渲染都需要执行的,可以将这些值缓存下来,如果组件重新渲染了,但是依赖项没有改变时,直接返回上一次的缓存值。减少了计算次数,以此提高了效率

4.useRef

useRef 返回一个可变的 ref 对象,其 .current 属性被初始化为传入的参数(initialValue)。返回的 ref 对象在组件的整个生命周期内保持不变。

本质上,useRef 就像是可以在其 .current 属性中保存一个可变值的“盒子”。

使用示例:

function TextInputWithFocusButton() {
  const inputEl = useRef(null);
  const onButtonClick = () => {
    // `current` 指向已挂载到 DOM 上的文本输入元素
    inputEl.current.focus();
  };
  return (
    <>
      <input ref={inputEl} type="text" />
      <button onClick={onButtonClick}>Focus the input</button>
    </>
  );
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

react hook 的相关文章

随机推荐

  • linux内核态发送tcp包,Linux内核发送构造数据包的方式

    本文欢迎自由转载 但请标明出处 并保证本文的完整性 作者 Godbach 日期 2009 09 01 一 构造数据包简析 这里并不详细介绍如何在内核中构造数据包 下文如有需要会在适当的位置进行分析 这里简单的分析讲一下内核态基于Netfil
  • 系统掌握数据结构8 树与二叉树 第二节

    树与二叉树 2节 1 线索二叉树的逻辑结构 2 线索二叉树的物理结构 3 中序线索二叉树 3 1 逻辑结构 3 2 代码实现 4 先序线索二叉树 5 后序线索二叉树 6 三叉链表的物理结构 7 先序线索二叉树的三叉链表存储实现 8 后序线索
  • 【转】C#操作sqlServer数据库

    转载地址 https blog csdn net weixin 42731241 article details 81172622 工具 vs2015 SqlServer 数据库的连接及打开关闭 VS2015建立一个c 的控制台应用程序 必
  • 10个 解放双手的 IDEA 插件,让你少写冤枉代码

    公众号关注 GitHubDaily 设为 星标 每天带你逛 GitHub 友情提示 插件虽好 可不要贪装哦 装多了会 卡 卡 卡 正经干活用的 分享一点自己工作中得心应手的 IDEA 插件 可不是在插件商店随随便便搜的 都经过实战检验 用过
  • 两种通过aop设置重试机制的方式

    注意 1 不要在同一个类中调用自定义的注解 如果controller调用 注解要放在service层 其他类 2 如果有配置aop扫描的包 不能只设置扫描control下的文件 方式一 controller层 RequestMapping
  • Map

    1 说明 系统根据C Reference学习下STL gt Map 2 Map Maps are associative containers that store elements formed by a combination of a
  • 攻略:Windwos 系统中应用程序访问权限

    在Windwos XP系统中 存在着两种类型的账户 即隶属于Administrators组中的管理员账户和隶属于Users组中受限制的用户 默认情况下 管理员账户可以无限制地运行计算机中的所有程序 包括XP系统内建的以及自行安装的应用程序
  • Vue常用指令详解分析

    Vue入门 Vue是一个MVVM Model View ViewModel 的前端框架 相对于Angular来说简单 易学上手快 近两年也也别流行 发展速度较快 已经超越Angular了 比较适用于移动端 轻量级的框架 文件小 运行速度快
  • 2023AI会议时间表(持续更新)

    本文已参与 新人创作礼 活动 一起开启掘金创作之路 这篇文我会持续更新 小伙伴们可以收藏 尤其是有发论文需求的同学 当然了 如果你上网方便 有耐心的话 也可以直接上这个网站去查看 只不过要筛选一下 我这里主要是把机器学习还有我自己比较相关的
  • 【牛客网 - 华为机试】HJ59 找出字符串只出现一次的字符

    HJ59 找出字符串只出现一次的字符 题目描述 找出字符串中第一个只出现一次的字符 输入描述 输入几个非空字符串 输出描述 输出第一个只出现一次的字符 如果不存在输出 1 示例1 输入 asdfasdfo aabb 输出 o 1 impor
  • C++去掉字符串前后的多余空格

    C 中std string 没有可以直接去掉字符串前后多余空格的接口 所以自己实现了一个 借鉴Qt中QString的trimmed 函数源码实现的版本 去掉std string 字符串前后的空格 void string trimmed st
  • vscode连接服务器

    使用VScode连接服务器的好处在于 vscode可以当成一个网页端的IDE 而使用Pycharm连接服务器则存在文件的同步问题 而且很慢 此处保险起见 加一个前提条件 to the best of our knowledge 步骤一 安装
  • Vue3的fragment

    vue2时 组件的模板结构中出现多个标签时 需要使用根标签 vue3时 组件的模板结构中出现多个标签时 可以不用根标签 这是因为vue3会自动将多个标签用fragment包裹 举个例子 main js import createApp fr
  • 华为h22h05服务器装系统_在新服务器装12年前的系统,如何实现

    2020年1月14日 微软正式终止支持Windows 7 包括不再提供任何技术支持 软件更新和安全更新及修复 这意味着 如果用户不想让自己的电脑 裸奔 就得升级到更新的操作系统版本 也许有些人觉得更新操作系统并没有什么 但对那些古董软件使用
  • 社会学讲义

    文章目录 一 社会学的观点和视角 1 世界为什么不是看起来的那个样子 为什么我们需要通过社会学的视角来看世界 2 社会学的想象力 赖特 米尔斯 C Wright Mills 3 为何要培养 社会学的想象力 4 为什么说人的世界观和人的属性是
  • 关于蓝牙测试蓝牙协议(应用层)

    1 HFP 让蓝牙设备可以控制电话 如接听 挂断 拒接 语音拨号等 拒接 语音拨号要看蓝牙设备和手机是否支持 2 HSP 描述了蓝牙耳机如何与计算机或者其他蓝牙设备 手机 通信 连接配置好后耳机可以作为远程设备的音频输入和输出接口 这个是最
  • torch.bmm()函数详解

    去掉batch size这一维度 按照矩阵乘法运算即可 自行体会 class PAM Module nn Module Position attention module def init self in dim gt None super
  • vue-cli4.0下antd(ant-design-vue)按需引入(附带完整过程)

    ant design vue 踩坑记录 官网没给vue cli4的例子 于是试试按照官网vue cli3的步骤操作 遇到了一些问题 这里记录下 后文给了完整过程 我亲自重新跑过一遍 应该是没有问题的 坑1 Failed to resolve
  • [vue报错]has been blocked by CORS policy

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 8080 setMealDetail goodsId 36363684365 1 Access to XMLHttpRequest at http 132 121 80 2
  • react hook

    一 hook的定义 Hook 是 React 16 8 的新增特性 它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性 二 使用react hook的好处 1 使用类组件 相关逻辑的代码会被分割到不同生命