【React Hooks原理 - useCallback、useMemo】

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

原理:

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

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

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

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

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

原理:

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

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

总结:

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

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

相关推荐
Darling噜啦啦8 分钟前
React 组件进化论:从状态混乱到 UI = fn(props) 的三次重构
react.js
并不喜欢吃鱼8 分钟前
一.前端web开发:零基础吃透 HTML5 核心知识
前端·html·html5
Hilaku16 分钟前
前端真的比后端简单吗?
前端·javascript·程序员
Canace19 分钟前
为了给视频里的人脸打码,我让 Claude 做了个 Skill
前端·人工智能
zhedream20 分钟前
a-select / a-input 自定义下拉、Vue2 Fragment ,以及 transfer-dom
前端·vue.js
无人生还21 分钟前
从 Vue3 到 React · 快速上手系列第 10 篇:路由
前端·vue.js·react.js
杉氧21 分钟前
跨平台持久化:Flutter 本地数据库的多线程安全与架构设计实践
android·前端·flutter
毅yi24 分钟前
里程碑1:实现elpis-core以及基于elpis-core的基础设置搭建
前端
FogLetter26 分钟前
进程VS线程:你的电脑到底是怎么同时干那么多活的?
前端·面试