当前位置: 首页 > Web前端 > HTML

React中memo和useMemo的区别和使用

时间:2023-03-29 11:04:51 HTML

网上的教程比较乱。还是希望大家可以手动敲代码体验一下。印象更好。React.memo和useMemo都减少了组件中不必要的开销,提高了性能。其中memo是子组件本身是否渲染。useMemo是子组件prop监控函数memomemo和shouldComponentUpdate的生命周期很相似也是判断组件是否渲染不使用memoconstChild=({name,children}:any)=>{functionchangeName(name:string){console.log("更改名称");returnname+"改名方法";}console.log("子组件更新");constotherName=changeName(名称);返回(<>

{otherName}
{children}
);};functionParent(){const[count,setCount]=useState(0);常量[名称,设置名称]=useState("名称");返回(<>
{count}
setCount(count+1)}>countsetName(newDate().getTime()+"")}>name);}导出默认父级;点击btn1、btn2按钮,都会触发Child,都会打印Child组件updatechangeName点击btn1,Child没有使用count属性,但还是渲染了,所以有个备注修改Child.tsxconstChild=React.memo(({name,children}:any)=>{functionchangeName(name:string){returnname+"methodtochangename";}console.log("Childcomponentupdate");constotherName=changeName(name);return(<>
{otherName}
{children}
);});clickbtn1,Child不会被触发useMemouseMemo更具体的是组件内部的调用方法constChild=({name,children}:any)=>{functionchangeName(name:string){console.log("changeName");returnname+"改名方法";}console.log("子组件更新");constotherName=changeName(名称);返回(<>
{otherName}
{children}
);};functionParent(){const[name,setName]=useState("name");const[内容,setContent]=useState("内容");返回(<>setName(newDate().getTime()+"")}>namesetContent(newDate().getTime()+"")}>content{content});}点击btn1,btn2按钮都将触发Child,并且都将打印Child组件更新changeName。当点击btn2时,因为Child重新渲染,也会打印changeName,但是btn2只是改变了内容,并没有改变Child中changeName需要的属性名。为此,我们希望当内容改变时,组件中的changeName函数不会被触发,因为changeName只用到name属性,所以我们应该使用useMemoconstChild=({name,children}:any)=>{functionchangeName(name:string){console.log("changeName");returnname+"改名方法";}console.log("子组件更新");constotherName=useMemo(()=>changeName(name),[name]);返回(<>
{otherName}
{children}
);};但是当我们点击btn2时,只会触发Child组件更新

最新推荐
猜你喜欢