类似vue中的computed
这俩hook也不能随意滥用,否则适得其反

Memo HOOK

用于持久化一些比较稳定的、开销比较大的数据(任何数据类型),常用于适当的性能优化。

  1. const memoryData = useMemo(()=>{
  2. return ()=>{
  3. setTxt(txt+1);
  4. };
  5. }, [txt]);

useMemo第一次执行就会执行第一个参数(函数),将其(第一个参数的)返回值作为useMemo的返回值
image.png
image.png
如果React元素本身的引用没有发生变化,一定不会重新渲染!!

更新n后,因为上述list一直不变,而且里面的每一项也没发生变化,所以都不会重新运行Item函数
所以上述 “Item Render value”只会在第一次渲染的时候打印,更新后发现啥都没变,则啥都不干

一般用的最多的时候是缓存生成元素的数组

Callback HOOK

用于得到一个固定引用值的函数,通常用它在适当的时候进行性能优化

注意:React不能给组件写类似于:onClick={handleClick(setTxt)} React不能这么传参数,Vue是可以的
可以写onClick={handleClick.bind(null, setTxt)} 但是!!bind返回的也是新函数!!

起因:给子组件绑定事件处理函数,一旦父组件重新渲染了,该函数地址引用就会变,故子组件也会重新渲染,所以才诞生了useCallback。

函数名:useCallback

该函数有两个参数:

  1. 第一个:函数,useCallback会缓存该函数的引用,只要依赖项没有发生变化,则始终返回之前的函数地址
  2. 第二个:数组,记录依赖项

该函数的返回值:引用相对固定的函数地址