基本信息
文件名称:React中useCallbackuseMemo使用方法快速精通.docx
文件大小:17.81 KB
总页数:7 页
更新时间:2025-05-30
总字数:约3.95千字
文档摘要

React中useCallbackuseMemo使用方法快速精通

目录useCallback和useMemo的区别useMemouseCallback首先从简单的讲一下两者的区别

useCallback和useMemo的区别

基本使用

//贴上代码片利于复制

import{React,useState,useMemo,useCallback}fromreact;

exportdefaultfunctionTestPage(){

constcallBack=useCallback(()={

console.log(1);

},[]);

constmemo=useMemo(()=123,[]);

console.log(callback,callBack);

console.log(memo是,memo);

return(

div

div一个专门用于vue测试的页面/div

/div

控制台输出如下

可以直观的看到,useCallBack返回的是一个函数,useMemo返回的是一个变量。

接下来我们来剖析这两个东西的用法

useMemo

首先从简单的讲起,如果你学过Vue的话,完全可以把它当成Computed来理解。在这里举一个很好理解的

import{React,useState,useMemo,useCallback}fromreact;

exportdefaultfunctionTestPage(){

const[data,updateData]=useState(1);

constgetComplicatedValue=()={

console.log(开始计算一个复杂的value值啦!);

lettotal=0;

for(leti=0;i100;i++){

total+=i;

returntotal;

constchangeData=()={

updateData((oldValue)=oldValue+1);

return(

div

div一个专门用于vue测试的页面/div

div这是一个复杂函数计算出来的值{getComplicatedValue()}/div

div这是一个简简单单的data值{data}/div

buttonchangeData}点击我改变data值/button

/div

大意就是,页面上有一个很简单的值data,还有一个很复杂的经过函数计算出来的值getComplicatedValue,这里我用从1加到100来模拟了一个很复杂的计算过程(实际项目会更复杂)。

页面显示如下

显示正常,根据控制台显示也可以看到getComplicatedValue函数也被正常调用了。接下来我们点击按钮改变data的值。

可以看到页面是正常更新了的,但是性能问题出现了,我改变了data的值,导致render函数重新执行,然后getComplicatedValue又被执行了一遍!也就是计算机重新计算了1加到100。那么问题出现了,如果我是1加到100000呢?很显然,在我们更新data值的时候,并不需要getComplicatedValue再次执行,而是希望它的计算值被缓存起来。useMemo闪亮登场!!!当当当当。

改写如下,改写只需要改动两行

import{React,useState,useMemo,useCallback}fromreact;

exportdefaultfunctionTestPage(){

const[data,updateData]=useState(1);

constgetComplicatedValue=useMemo(()={

console.log(开始计算一个复杂的value值啦!);

lettotal=0;

for(leti=0;i100;i++){

total+=i;

returntotal;

},[]);

constchangeData=()={

updateData((oldValue)=oldValue+