网站首页 > 技术文章 正文
大家好,我是前端西瓜哥。我们继续学习 React Hooks,今天说说 useMemo。
useMemo 用于缓存值。它接受一个回调函数,和一个依赖项数组。
组件第一次渲染时,useMemo 会执行该回调函数,拿到一个初始值。
之后重新渲染时,如果依赖项没变,会使用上一次缓存的值;如果依赖项更新了,就会执行回调函数返回新的值,并将其缓存起来。
const complexCalc = count => {
// 假装自己很复杂
return count;
}
const val = useMemo(() => complexCalc(count), [count]);
前面我们学过 useCallback 在表现上,可以看做是 useMemo 的一个返回值为函数的特例。
我们完全可以用 useMemo 来替代 useCallback:
useCallback(fn, deps);
// 等价于
useMemo(() => fn, deps);
对比 Vue 计算属性
说起来,useMemo 很像 Vue 的计算属性(computed)。二者都是在依赖项发生改变时,重新计算出一个值,否则使用缓存。
对于依赖项的处理,Vue 要更智能些,不需要自己维护依赖项数组,Vue 自己能够知道函数的执行使用了哪些响应式属性,一旦改变就更新计算属性。
但缺点是不能监听非响应式属性的更新,也不能做到忽视掉一些依赖项的变化。只要一个变了就一定会执行函数来更新。
对于编写 useMemo 时可能不小心漏掉依赖项的问题,可以通过使用 React 官方提供的 eslint 插件提示来解决。
总的来说,我觉得 React 的 useMemo 更胜一筹,不,简直完胜。
结尾
useMemo 的功能很简单,就是每次渲染时,通过判断依赖项是否保持原状,来决定是否使用缓存,来减少一些高昂的计算过程。
- 上一篇: Jquery属性——学习笔记(一)
- 下一篇: 前端工具ESLint
猜你喜欢
- 2025-01-05 vue 3 学习笔记 (八)——provide 和 inject 用法及原理
- 2025-01-05 vue3 学习笔记 (一)——mixin 混入
- 2025-01-05 golang+mysql+GORM学习笔记
- 2025-01-05 Vue3 学习笔记,快速初始化Vue项目及 data 函数用法学习(二)
- 2025-01-05 Web前端经典面试题(三)
- 2025-01-05 前端工具ESLint
- 2025-01-05 Jquery属性——学习笔记(一)
- 2025-01-05 SwiftUI学习笔记,可视化编辑和界面布局(二)
- 2025-01-05 「React Hooks 学习笔记」useCallback
- 2025-01-05 前端大文件分片上传断点续传
你 发表评论:
欢迎- 581℃几个Oracle空值处理函数 oracle处理null值的函数
- 576℃Oracle分析函数之Lag和Lead()使用
- 561℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 561℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 556℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 546℃【数据统计分析】详解Oracle分组函数之CUBE
- 535℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 530℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端懒加载 (49)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)