React 其他 Hooks

news2024/9/21 3:33:02

其他 Hooks

useRef

可用于获取 DOM 元素

 const ScrollRef = useRef(null)
 ScrollRef.current

useContext

(先回顾一下之前的 Context 知识,借用之前 ppt 和源码)

Hooks 中使用 useContext获取 context 的值

 // 父组件创建 context
 export const MenuContext = createContext<IMenuContext>({ index: 0 })    // 初始值
 ​
 // context 传递的数据
 const passedContext: IMenuContext = {
     index: currentActive ? currentActive : 0,
     onSelect: handleClick,
 }
 ​
 <MenuContext.Provider value={passedContext}>
     {renderChildren()}
 </MenuContext.Provider>
 ​
 // 子组件使用
 const context = useContext(MenuContext)
 context.onSelect(index)

useReducer

useReducer 和 redux 不同

  • useReducer 是 useState 的代替方案,用于更复杂的 state 变化逻辑

  • useReducer 是单组件的状态管理,多组件通讯还是需要 props 传递数据

  • redux 是全局的状态管理,多组件可共享数据

useMemo

(先回顾一下之前的性能优化部分的知识,借用之前 ppt 和源码)

  • React 默认更新所有子组件

  • Class 组件使用 SCU 或者 PureComponent 进行优化

  • Hooks 里使用 useMemo 缓存数据(和 PureComponent 原理是一样的)

 // 子组件使用 memo()包裹  (对props浅层对比)
 const Child = memo(({ userInfo }) => {
     console.log('Child render ...', userInfo)
     
     return <>
      </>
 })
 ​
 // 父组件 用 useMemo 缓存传递的数据, 有依赖
 const userInfo = useMemo(() => {
     return { name, age = 21 }
 }, [name])
 ​
 <Child userInfo={userInfo}/>

useCallback

在 useMemo 的基础上继续,如果是函数传递给子组件,怎么办?

  • useMemo 缓存数据

  • useCallback 缓存函数

 // 子组件
 const Child = ({ onChange }) => {
     console.log('Child render ...', onChange)
     
     return <>
      </>
 }
 ​
 // 父组件 用 useCallback 缓存传递的函数, 依赖 []
 const onChange = useCallback(e => {
     console.log(e.target.value)
 }, [])
 ​
 <Child onChange={onChange}/>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1685852.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在MySQL数据库中的视图和事务。

视图 view 临时表 作用&#xff1a;优化多表查询的效率 可以将经常使用的连接查询结果使用视图进行保存&#xff0c;避免多次重复的笛卡尔积运算 MySQL数据库在多表查询的时候会自动进行笛卡尔积运算。 如果将来经常要用到某一个多表查询的结果就可以使用视图将这个结果…

Android 观察者模式(OBSERVER)应用详解

文章目录 1、观察者模式设计初衷1.1. 解耦对象之间的依赖关系1.2. 允许动态的依赖关系1.3. 自动通知和更新1.4 设计初衷的详细说明1. 对象之间的解耦2. 动态依赖关系3. 自动更新 2、实现细节2.1. Subject 接口和实现2.2. Observer 接口和实现2.3. 主类 3、主要角色4、关系示意图…

Nginx - Stream 日志模块不完全指北

文章目录 Pre官网Nginx Stream模块基础功能Nginx Stream访问日志的缺陷解决方案或替代方案安装和配置nginx-log-enhancement模块1. 下载nginx-log-enhancement模块源代码2. 解压源代码3. 配置Nginx源代码4. 编译和安装Nginx5. 配置nginx-log-enhancement模块6. 重启Nginx7. 测试…

I/O '24|学习资源焕新,技术灵感升级

2024 年 5 月 15 日凌晨举行的 Google I/O 大会为各地的开发者们带来了新的灵感。面对技术革新&#xff0c;相信各位开发者们都迫不及待想要自己上手试一试。 别急&#xff0c;Google 谷歌今年为中国的开发者们准备了一份特别的学习资源&#xff0c;让开发者们自由探索新知。 G…

RedisTemplate操作Redis, 看这一篇文章就够了

文章目录 1. String 命令1.1 添加缓存1.2 设置过期时间(单独设置)1.3 获取缓存值1.4 删除key1.5 顺序递增1.6 顺序递减1.7 常用的 2. Hash命令2.1 添加缓存2.2 设置过期时间(单独设置)2.3 添加一个Map集合2.4 提取所有的小key2.5 提取所有的value值2.6 根据key提取value值2.7 获…

【VTKExamples::Texture】第六期 TextureThreshold

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享VTK样例TextureThreshold,并解析接口vtkTexture,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就是我的动力(^U^)ノ~Y…

20240524每日后端---------聊聊编写简历

简历 简历就是你的名片。 生活中很多朋友却不拿简历当一回事。 最近看了几十份应聘简历&#xff0c;我不得不佩服有些老哥&#xff0c;工作十来年&#xff0c;简历还是表格的格式&#xff0c;不仅看着不好看&#xff0c;而且排版还贼差。 第一感官就很差好吧。。。 好的简历 …

二叉树(详解)

在了解二叉树之前呢我们先来了解一下树形结构&#xff0c;因为二叉树就是树形结构的一种特殊情况&#xff0c;它有这非常好的性质&#xff0c;是很常用的一种结构。 目录 一.什么是树形结构&#xff1f; 二.树形结构常见的名词 三.树的存储 四.二叉树 1.二叉树的概念 2.…

python web自动化(Pytest实战)

1.UnitTest框架与Pytest框架对⽐ 1&#xff09; unittest框架介绍 Unittest则是Python语⾔的标准单元测试框架。 Unittest⽀持⾃动化测试&#xff0c;测试⽤例的初 始化、关闭和测试⽤例的聚合等功能&#xff0c;它有⼀个很重要的特性&#xff…

勒索病毒的策略与建议

随着网络技术的快速发展&#xff0c;勒索病毒攻击成为全球范围内日益严重的网络安全威胁。勒索病毒通过加密用户文件或锁定系统来勒索赎金&#xff0c;给个人和企业带来了巨大的损失。因此&#xff0c;了解如何应对勒索病毒攻击至关重要。本文将概述一些有效的防范措施和应对策…

深入Django项目实战与最佳实践

title: 深入Django项目实战与最佳实践 date: 2024/5/19 21:41:38 updated: 2024/5/19 21:41:38 categories: 后端开发 tags: Django 基础项目实战最佳实践数据库配置静态文件部署高级特性 第一章&#xff1a;Django项目架构与设计原则 Django框架概述 Django是一个高级的P…

目前流行的前端框架有哪些?

目前流行的前端框架有很多&#xff0c;它们可以帮助开发者快速构建高质量的前端应用程序。本文将介绍一些目前比较受欢迎的前端框架&#xff0c;并分析它们的优缺点。 React React 是一个由 Facebook 开发的开源前端JavaScript库&#xff0c;用于构建用户界面&#xff0c;尤其…

如何从Android恢复已删除的文件?3 种有效的方式

有时我们可能会错误地删除Android设备上的重要文件。更疯狂的是&#xff0c;Android手机上的文件在一夜之间消失了&#xff0c;我们不知道为什么。我们感到非常遗憾和恼火&#xff0c;但不知道。但是&#xff0c;此时学习如何从Android手机恢复已删除的文件为时已晚&#xff0c…

二.常见算法--贪心算法

&#xff08;1&#xff09;单源点最短路径问题 问题描述&#xff1a; 给定一个图&#xff0c;任取其中一个节点为固定的起点&#xff0c;求从起点到任意节点的最短路径距离。 例如&#xff1a; 思路与关键点&#xff1a; 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…

怎么压缩pdf pdf在线压缩 pdf文件压缩大小

pdf文件无论在何种设备上打开&#xff0c;PDF文件都能保持其原始的布局和格式&#xff0c;这对于文档共享和打印非常重要。PDF不仅支持文本&#xff0c;还能嵌入图像、视频、音频以及动态链接等元素。PDF文件支持加密和密码保护&#xff0c;可以限制访问、编辑、复制或打印文档…

Dalle2学习

Dalle2 mini有GitHub库并且有网页可以直接测试

[图解]产品经理创新模式03封装领域逻辑

1 00:00:02,530 --> 00:00:06,840 第三个改进模式就是封装领域逻辑 2 00:00:06,840 --> 00:00:12,860 把人脑里面的封装的逻辑提炼出来 3 00:00:12,870 --> 00:00:13,740 放到电脑里面去 4 00:00:16,100 --> 00:00:21,440 比如说&#xff0c;销售员的&#xff0…

Zookeeper 安装教程和使用指南

一、Zookeeper介绍 ZooKeeper 是 Apache 软件基金会的一个开源项目&#xff0c;主要基于 Java 语言实现。 Apache ZooKeeper 是一个开源的分布式应用程序协调服务&#xff0c;提供可靠的数据管理通知、数据同步、命名服务、分布式配置服务、分布式协调等服务。 关键特性 分布…

《王者荣耀》4月狂揽2.34亿美元 单日流水1亿美元 全球销量第二

易采游戏网5月24日消息&#xff0c;在刚刚过去的四月&#xff0c;全球手游市场迎来了一场收益的盛宴&#xff0c;其中《王者荣耀》以其惊人的吸金能力&#xff0c;以2.34亿美元的月收入在全球手游排行榜上位列第二。4月5日&#xff0c;这款由腾讯游戏开发的多人在线战斗竞技游戏…

JS、Go、Rust 错误处理的不同 - JS 可以不用 Try/Catch 吗?

原文&#xff1a;Mateusz Piorowski - 2023.07.24 先来了解一下我的背景吧。我是一名软件开发人员&#xff0c;有大约十年的工作经验&#xff0c;最初使用 PHP&#xff0c;后来逐渐转向 JavaScript。 大约五年前&#xff0c;我开始使用 TypeScript&#xff0c;从那时起&#…