react教程,如何使用useMemo缓存函数运算结果?
发布于 作者:苏南大叔 来源:程序如此灵动~

react
项目的函数式组件中,有很多useXxx
系列函数,每个函数都有其特殊的作用。本文描述useMemo
函数,它是用来缓存函数的执行结果的,效果就是:可以不执行函数计算直接拿到上次的缓存结果。

大家好,这里是苏南大叔的程序如此灵动博客,这里记录苏南大叔和计算机代码的故事。本文描述react
函数式组件的useMemo
函数。测试环境:create-react-app@5.0.1
,react@18.2.0
,react-dom@18.2.0
,node@16.14.2
。
useMemo
useMemo
函数:
- 第一个参数:
()=> value
,没有形参,返回一个value
。 - 第二个参数:依赖
[m,n]
。只有当依赖变化时,才会计算新的value
。
测试代码
使用useMemo
的代码范例,如下:

在这个代码中,定义了一个普通变量,具有两个属性name
和city
。
- 变量
city
来自:函数一getCity()
,根据city
拼音来返city
的中文名字。 - 变量
status
来自:函数二(使用useMemo
的匿名函数),只有依赖项没有发生变化,就不会重新计算返回值。
运行结果
输出的代码逻辑为:
注意:被useMemo
的getStatus
函数的依赖项目为info.city
,只有info.city
被修改后,getStatus
函数才会被重新计算。
第一步,初始化
上述代码初始预算值为:
console
的默认输出值为:
可见,两个函数都被执行了。
第二步,点击第一个按钮
按钮一修改了info
状态的name
属性,并没有修改info.city
。所以,city
变量重新计算了(输出getCity
)。而status
变量是useMemo
的,依赖项目info.city
没有发生变化,所以没有重新计算输出值(没有输出getStatus
)。
因为只执行了没有用到usememo
的getCity()
函数,所以console
的输出值为:

第三步,点击第二个按钮
按钮二修改了info
状态的city
属性,所以city
变量和status
变量都重新计算了,输出getCity
和getStatus
。
因为也执行了用到usememo
的getStatus()
函数,所以console
的输出值为:

useMemo
对比memo
useMemo
是个用于函数式组件的缓存函数。memo
主要用于缓存组件本身的(虽然主要用于函数式组件,但是也可以用于类组件),类似于类组件的PureComponent
。
相关文章
- https://newsn.net/say/react-memo.html
- https://newsn.net/say/react-useref.html
- https://newsn.net/say/react-usestate.html
- https://newsn.net/say/react-pure-component.html
- https://newsn.net/say/react-useeffect.html
结束语
更多react
经验文章,请点击苏南大叔的经验文章:


