【React Hooks原理 - useCallback、useMemo】

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

原理:

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

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

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

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

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

原理:

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

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

总结:

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

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

相关推荐
哎呦你好几秒前
【CSS】Grid 布局基础知识及实例展示
开发语言·前端·css·css3
盛夏绽放10 分钟前
接口验证机制在Token认证中的关键作用与优化实践
前端·node.js·有问必答
zhangxingchao26 分钟前
Jetpack Compose 之 Modifier(中)
前端
JarvanMo26 分钟前
理解 Flutter 中 GoRouter 的context.push与context.go
前端
pe7er32 分钟前
使用 Vue 官方脚手架创建项目时遇到 Node 18 报错问题的排查与解决
前端·javascript·vue.js
星始流年35 分钟前
前端视角下认识AI Agent
前端·agent·ai编程
pe7er39 分钟前
使用 types / typings 实现全局 TypeScript 类型定义,无需 import/export
前端·javascript·vue.js
CH_Qing40 分钟前
【udev】关于/dev 设备节点的生成 &udev
linux·前端·网络
小诸葛的博客44 分钟前
gin如何返回html
前端·html·gin
islandzzzz1 小时前
(第二篇)HMTL+CSS+JS-新手小白循序渐进案例入门
前端·javascript·css·html