【React Hooks原理 - useCallback、useMemo】

useMemo用于缓存计算结果,它只在依赖项发生变化时重新计算

原理:

依赖项检查:useMemo接收2个参数,一个"创建"函数和一个依赖项数组。依赖项数组中的值在每次渲染时都会被比较,以决定是否需要重新计算

缓存机制:如果依赖项没有发生变化,useMemo会返回上一次计算的结果,而不是重新执行"创建"函数,避免了在组件每次渲染时都进行昂贵的计算

优化渲染:减少了组件的渲染次数

复制代码
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

useCallback:用于缓存函数定义。确保依赖项不变的情况下,不会重新创建函数

原理:

依赖项检查:useCallback接收一个函数和一个依赖项数组,如果依赖项没变化,会返回缓存的函数引用,而不是创建一个新的函数

避免不必要的渲染:在React中,父组件的重新渲染会导致其所有子组件也重新渲染,除非这些子组件的props没有改变,从而避免子组件不必要的渲染

总结:

  • useMemo 用于缓存计算结果,避免在每次渲染时重复计算。

  • useCallback 用于缓存函数定义,避免在每次渲染时创建新的函数实例。

相关推荐
方也_arkling32 分钟前
别名路径联想提示。@/统一文件路径的配置
前端·javascript
毕设源码-朱学姐35 分钟前
【开题答辩全过程】以 基于web教师继续教育系统的设计与实现为例,包含答辩的问题和答案
前端
qq_1777673740 分钟前
React Native鸿蒙跨平台剧集管理应用实现,包含主应用组件、剧集列表、分类筛选、搜索排序等功能模块
javascript·react native·react.js·交互·harmonyos
qq_177767371 小时前
React Native鸿蒙跨平台自定义复选框组件,通过样式数组实现选中/未选中状态的样式切换,使用链式调用替代样式数组,实现状态驱动的样式变化
javascript·react native·react.js·架构·ecmascript·harmonyos·媒体
web打印社区1 小时前
web-print-pdf:突破浏览器限制,实现专业级Web静默打印
前端·javascript·vue.js·electron·html
RFCEO1 小时前
前端编程 课程十三、:CSS核心基础1:CSS选择器
前端·css·css基础选择器详细教程·css类选择器使用方法·css类选择器命名规范·css后代选择器·精准选中嵌套元素
烬头88212 小时前
React Native鸿蒙跨平台采用了函数式组件的形式,通过 props 接收分类数据,使用 TouchableOpacity实现了点击交互效果
javascript·react native·react.js·ecmascript·交互·harmonyos
Amumu121382 小时前
Vuex介绍
前端·javascript·vue.js
We་ct2 小时前
LeetCode 54. 螺旋矩阵:两种解法吃透顺时针遍历逻辑
前端·算法·leetcode·矩阵·typescript
qq_177767372 小时前
React Native鸿蒙跨平台通过Animated.Value.interpolate实现滚动距离到动画属性的映射
javascript·react native·react.js·harmonyos