React Hook的useCallback,memo,usememo的使用

2023-11-02

1、useCallback

每当组件重新渲染的时候,我们之前定义的函数就会被重新声明一次,即使这个函数不需要做出改变。这时可以使用useCallback。useCallback主要用于缓存一个函数。
useCallback接收两个参数,第一个参数为一个回调函数,第二个参数为依赖数组。只有当依赖数组中的成员发生变化时,才进行重新声明该回调函数。
一个简单的demo

mport React,{useCallback,useState} from 'react'

export default function UseCallback() {
    const [text,settext] = useState("小明")
    const fun = useCallback(()=>{
        console.log(text)  
    },[text])
    return (
        <div>
            <button onClick={_=>{
                fun()
                settext("小美")
            }}>click</button>
        </div>
    )
}

这段代码第一次点击的时候,输出为小明,第二次点击输出为小美。说明fun函数被重新声明了。当吧依赖数组中的text取消变为空数组之后,第一次和第二次点击都输出小明,说明fun函数的内容已经被缓存起来了。

使用useCallback可以进行性能优化,减少不必要的性能损耗!

memo

memo其实和类组件中的purecomponent的功能一直,都是用来做组件的性能优化的。
现在我们有如下的场景,父组件是一个呈现事件的组件,每一秒刷新一次当前时间,子组件只是一个普通的文字组件。我们知道,每当父组件状态被改变,子组件也会被重新渲染,这时在hook里我们就可以用memo进行性能的优化。
父组件:

function Memo() {
    var [time,settime] = useState()
    useEffect(()=>{
        setInterval(()=>{
            settime(new Date().toString())
        },[time])
    },[time])
    
    return (
        <div>
            当前时间为-{time}
            <Child ></Child>
        </div>
    )
}

子组件:

var Child = React.memo(function Child(){
    console.log("我被重新渲染了")
    return (
        <div >我是子组件</div>
    )
},(prevprops,nextprops)=>{
    if(prevprops === nextprops){
        return false
    }
    return true
})

memo是一个高阶组件,它接受两个参数,第一个是一个组件,第二个是一个函数。第二个函数中,会接受之前的属性和之后的属性,我们可以通过对比这两个属性,来决定第一个组件进步进行重新渲染。

useMemo

useMemo和useCallback功能相似,都是用来做性能的优化,用来缓存数据。不同的是useMemo返回的是一个函数执行的结果,而useCallback返回该函数本身。

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

React Hook的useCallback,memo,usememo的使用 的相关文章

  • PHP2详细解析,(响应码,url编码,御剑)

    标题1 打开之后各种手段都尝试 抓包 源码为协议等等 结果还是不出现 然后就想到用到最近刚 下载的工具御剑来扫一下目录 发现御剑依靠的是字典进行扫描 其实这个index phps也是自己添加的字典有限 所以还是学习用一下dirsearch把
  • sublime列编辑状态

    从notepad 转到sublime 感觉sublime的列编辑没有notepad 好用 一个是先入为主的问题 notepad 进行列编辑是alt 左键 notepad 进行列选择时 选择的行没有编辑也是可以选中的 sublime只能选中编

随机推荐

  • 量化交易策略干货收集

    量化交易策略 价值投资 成长股内在价值投资 http www joinquant com post 541 三一投资管理公司价值选股法 http www joinquant com post 556 低估价值选股策略 http www jo
  • 网易笔试编程题

    下厨房 题目描述 牛牛想尝试一些新的料理 每个料理需要一些不同的材料 问完成所有的料理需要准备多少种不同的材料 输入描述 每个输入包含 1 个测试用例 每个测试用例的第 i 行 表示完成第 i 件料理需要哪些材料 各个材料用空格隔开 输入只
  • jenkins -- send files or execute commands over ssh

    新建一个任务free 我之前已经建好 其余的保持默认 保存或应用 回到任务 开始构建 查看日志 传输成功 在服务器上 查看对应的路径 a js 确实已经传送成功
  • signature=8dfeb54e036883a518e97630c0013eed,unit3.lfm · BLumia/BLumiaTimidityShell - Gitee.com

    object Form3 TForm3 Left 357 Height 211 Top 100 Width 578 BorderStyle bsDialog Caption About ClientHeight 211 ClientWidt
  • RelativeLayout相对布局

    相对布局 RelativeLayout 允许子元素指定它们相对于其父元素或兄弟元素的位置 这是实际布局中最常用的布局方式之一 它灵活性大很多 当然属性也多 操RelativeLayout相对布局 相对布局 RelativeLayout 允许
  • 「软件测试」最全面试问题和回答,全文背熟不拿下offer算我输

    一般要应聘关于测试的工作 面试题会不会很难 下面小编整理了软件测试面试题及答案 欢迎参考 一 引言 1 1 文档目的 本次文档是为了收集在面试中遇到的一问题与常见的一些答案并不是唯一答案 二 职业规划 2 1 简单的自我介绍下 面试宫 您好
  • 对注意力机制(Attention)的一些理解附上Bi-LSTM和seq2seq加上注意力机制的代码

    注意力机制 简单来说就是让模型能够学会具体问题具体分析吧 比如问你是个水果大师 别人问你这个苹果怎么样 那总得盯着苹果端详吧 而不是去看那个西瓜 理解的应该差不太多吧 这个是从b站看的一个手推注意力机制的视频 照着画了一遍 感觉大概也是明白
  • Java可视化界面设计(登录界面设计)

    1 界面居中显示 frame setResizable false fame setLocationRelativeTo null frame setVisible true 2 全屏操作 Dimension screenSize Tool
  • 联想微型计算机C470拆装,联想C470一体机一键U盘重装系统教程图解

    联想C470一体机造型小巧 外观唯美时尚 易于摆放并能脱离冗杂线缆的束缚 该机是一款非常时尚的家用一体电脑 采用21 5英寸触控屏幕 全高清显示相当精细 无论是学习办公 还是家庭娱乐都能够满足用户的需求 下面给大家介绍联想C470一体机一键
  • 数的分解

    题目描述 本题为填空题 只需要算出结果后 在代码中使用输出语句将所填结果输出即可 把 20192019 分解成 33 个各不相同的正整数之和 并且要求每个正整数都不包含数字 22 和 44 一共有多少种不同的分解方法 注意交换 33 个整数
  • 七牛产品概览

    七牛云产品概览 服务对象 个人开发者 创业团队 企业用户 对象存储 Kodo 简介 七牛云提供的数据存储服务主要是针对静态资源文件 image js css 音频 视频 文档 PDF txt json xml yml apk 等等 提供存储
  • Java中string的null和“”对比

    Java中字符串的比对用string equals object 来做 但与空字符串比对的时候要注意 如果是 话 用string equals 如果是null的时候 string equals null 会报错 应该使用string nul
  • SYSAUX表空间清理之WRH$_ACTIVE_SESSION_HISTORY

    查看sysaux表空间使用率高 对于sysaux表空间之前有文章讨论过 本次直入正题 1 检查sysaux表空间占用空间较大的segments SQL gt select from select owner segment name seg
  • mysql while bug_案例分享:MySQL BUG处理

    近一个月处理历史数据问题时 居然连续遇到了2个MySQL BUG 分享给大家一下 也欢迎指正是否有问题 BUG1 数据库版本 MySQL5 7 25 28 操作系统 Centos 7 7 不重要 数据库架构 主 从 级联从 数据库参数 in
  • Java 冒泡排序示例

    以下是 Java 语言实现冒泡排序的示例代码 public class BubbleSort public static void main String args int arr 5 2 8 3 9 1 bubbleSort arr Sy
  • 64、3D Neural Scene Representations for Visuomotor Control

    简介 主页 https 3d representation learning github io nerf dy 机器人操作模型学习的核心问题之一是如何确定 dynamics model 的状态表示 理想的表示应该易于捕捉环境动态 展示对场
  • CDN是做什么用的,怎么一直有人在推荐使用?

    CDN 内容分发网络 的作用与不断的推荐使用背后有着深刻的原因 这是因为CDN在互联网领域发挥着重要且多方面的作用 为许多网站和在线业务提供了显著的优势 首先 让我们来了解CDN的作用是什么 CDN是一种网络架构 旨在将网站的静态资源 如图
  • 100级小号搬砖地图_DNF100版本搬砖地图最高收益攻略(利润化透明)

    DNF搬砖那个地图收益最高 100版本搬砖攻略 大家都知道DNF是一款经典的手游 到现在已经运营十年了 同时也是一款氪金的 当然对于神豪来说都是小问题 但是对于一般的玩家 想玩DNF建议还是先去医院检查一下肝 肝不好建议别入坑 今天小编就给
  • 数学的科普文

    20210105 这次又是整理自己的书签 然后发现了这个文章 这个文章应该是很久之前的时候我看到的 觉得很有趣 应该是当时学习最小二乘法的时候看到的 所以这篇文章就来记录一些平时看到的不错的科普文 以前很多文章都错过了 挺可惜的 正态分布的
  • React Hook的useCallback,memo,usememo的使用

    1 useCallback 每当组件重新渲染的时候 我们之前定义的函数就会被重新声明一次 即使这个函数不需要做出改变 这时可以使用useCallback useCallback主要用于缓存一个函数 useCallback接收两个参数 第一个