首页 > 其他分享 >useCallback与useMemo使用场景

useCallback与useMemo使用场景

时间:2022-11-30 17:34:50浏览次数:28  
标签:场景 render useMemo useCallback re state 对象 组件

为什么需要useCallback和useMemo

当父组件props或者state变化时 会引起父组件和该父组件所属子组件re-render,

注意:即使子组件没有依赖父组件的state或者依赖的state没有变化,也会触发子组件的 re-render,即会执行比较,但是页面不一定重新渲染。

 

当子组件的 props包括函数或者对象数据,这种情况如果每次父组件re-render的时候,函数或者对象数据会重新生成,也就是变成了不同的对象,这就导致即使

子组件被react.memo封装了,每一次父组件re-render,子组件也会re-render。因为子组件的props每次都不一样,因为函数和对象都是复杂数据类型,每次生成新的

函数或者对象之后,都是不同的对象。

如果想保证每次父组件re-render的时候,子组件props里面的函数和对象不会重新生成,就要用到useCallback和useMemo。

 

useCallback的弱点

 

如果useCallback的依赖项中包含 useState生成的state,这样每次state变化的时候,callback还是会重新生成。

1、可以通过useRef的方式把state的状态保存到 useRef生成的对象里面去这样依赖项就换成了useRef生成的对象了,这个对象地址是不会变的。

2、封装一个自定义hooks,把生成的useCallback保存到hooks的内部对象的useRef中,然后useRef生成的对象已经存在,则就不需要重新执行useCallback

 

 

 

 

标签:场景,render,useMemo,useCallback,re,state,对象,组件
From: https://www.cnblogs.com/hellolol/p/16938506.html

相关文章