memo、 useMemo 和 useCallback语法讲解

2023-12-25 10:12

本文主要是介绍memo、 useMemo 和 useCallback语法讲解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

memo、 useMemo 和 useCallback

+缓存组件, 对组件浅比较 (只有组件的props, (对函数,引用要用useCallback包裹)发生变化
+缓存值, 依赖项变化,会从新计算。
+缓存函数, 依赖项变化,重新生成新函数

useMemo 语法

对返回的值缓存进行优化


const memoizedValue = useMemo(() => computeExpensiveValue(a, b), deps);
  1. 传入一个函数进去,会返回一个 memoized 值(会记忆的值),需要注意的是,函数内必须有返回值

  2. 第二个参数会依赖值,

类似于computed实时计算

useMemo 优化

我们定义了一个total函数,内部使用 1 填充了100次,通过 reduce 计算总和,经过测试发现点击 Increase按钮后,只会执行 total1 ,不会执行 total2,假设total计算量巨大,就会造成内存的浪费,通过 useMemo 可以帮我们缓存计算值。

function App(){    console.log('Demo1 Parent')    let [count,setCount] = useState(0)    const handleClick = ()=>{        setCount(count+1)    }    const total1 = ()=>{        console.log('计算求和1')        let arr = Array.from({ length:100 }).fill(1)        return arr.reduce((prev,next)=>prev+next,0)    }    // 缓存对象值    const total2 = useMemo(()=>{        console.log('计算求和2')        let arr = Array.from({ length:100 }).fill(1)        return arr.reduce((prev,next)=>prev+next,0)    },[count]) return (        <div>            <div>                <label>Count:{count}</label>             <button onClick={handleClick}>Increase</button>            </div>            <div>                <label>总和:</label>                <span>{total1()}</span>                <span>{total2}</span>            </div>        </div>    )
}
useCallback 语法

对函数缓存进行优化

useCallback(callback, deps)
  1. useCallback 接收 2 个参数,第一个为缓存的函数,第二个为依赖值

  2. 主要用于缓存函数,第二次会返回同样的结果。

useCallback 优化
import { memo, useCallback, useState } from 'react'function App() {const [count, setCount] = useState(0)const handleClick = useCallback(() => {console.log('子节点点击...')}, [])return (<div className='App'><p>欢迎学习React后台课程</p><p><span>Count: {count}</span><buttononClick={() => {setCount(count + 1)}}>按钮</button></p><Child handleClick={handleClick} /></div>)
}const Child = memo(function Child(props: any) {console.log('child...')return (<p>我是子节点 <button onClick={props.handleClick}>按钮</button></p>)
})
useCallback 和 useMemo 区别
  • 他们都用于缓存,useCallback 主要用于缓存函数,返回一个 缓存后 函数,(防止函数重复创建)

  • useMemo 主要用于缓存值,返回一个缓存后的值。(防止值重复计算)

  • memo,防止组件重复创建 (只有组件的props, (对函数,引用要用useCallback包裹)发生变化,组件才会更新.)

这篇关于memo、 useMemo 和 useCallback语法讲解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535144

相关文章

Java进程CPU使用率过高排查步骤详细讲解

《Java进程CPU使用率过高排查步骤详细讲解》:本文主要介绍Java进程CPU使用率过高排查的相关资料,针对Java进程CPU使用率高的问题,我们可以遵循以下步骤进行排查和优化,文中通过代码介绍... 目录前言一、初步定位问题1.1 确认进程状态1.2 确定Java进程ID1.3 快速生成线程堆栈二、分析

javascript fetch 用法讲解

《javascriptfetch用法讲解》fetch是一个现代化的JavaScriptAPI,用于发送网络请求并获取资源,它是浏览器提供的全局方法,可以替代传统的XMLHttpRequest,这篇... 目录1. 基本语法1.1 语法1.2 示例:简单 GET 请求2. Response 对象3. 配置请求

Java Stream.reduce()方法操作实际案例讲解

《JavaStream.reduce()方法操作实际案例讲解》reduce是JavaStreamAPI中的一个核心操作,用于将流中的元素组合起来产生单个结果,:本文主要介绍JavaStream.... 目录一、reduce的基本概念1. 什么是reduce操作2. reduce方法的三种形式二、reduce

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选

mysql递归查询语法WITH RECURSIVE的使用

《mysql递归查询语法WITHRECURSIVE的使用》本文主要介绍了mysql递归查询语法WITHRECURSIVE的使用,WITHRECURSIVE用于执行递归查询,特别适合处理层级结构或递归... 目录基本语法结构:关键部分解析:递归查询的工作流程:示例:员工与经理的层级关系解释:示例:树形结构的数

Java使用Stream流的Lambda语法进行List转Map的操作方式

《Java使用Stream流的Lambda语法进行List转Map的操作方式》:本文主要介绍Java使用Stream流的Lambda语法进行List转Map的操作方式,具有很好的参考价值,希望对大... 目录背景Stream流的Lambda语法应用实例1、定义要操作的UserDto2、ListChina编程转成M

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT

HTML5表格语法格式详解

《HTML5表格语法格式详解》在HTML语法中,表格主要通过table、tr和td3个标签构成,本文通过实例代码讲解HTML5表格语法格式,感兴趣的朋友一起看看吧... 目录一、表格1.表格语法格式2.表格属性 3.例子二、不规则表格1.跨行2.跨列3.例子一、表格在html语法中,表格主要通过< tab