为什么需要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