React-Hooks中的useMemo

1,381 阅读1分钟

要理解React.useMemo,首先需要理解React.memo

React.memo

  • React.memo适用于函数组件而不适用于类组件。
  • 如果一个函数组件在给定相同props的情况下渲染出相同结果,那么可以将该组件包装在React.memo中使用。
  • 使用React.memo时,若出现上述情况,React将跳过渲染组件的操作并复用最近一次的渲染结果。
  • React.memo只会检查props变更,如果在使用React.memo包裹组件时其实现中有useStateuseContext等Hooks,那么当context发生变化时,该组件仍然会重新渲染。

useMemo

特点

  • 接受两个参数,第一个参数为()=>value
  • 第二个参数是依赖,为[m,n]
  • 只有当依赖变化时,才会计算新的value。
  • 如果依赖不变,那么就会重用之前的value。
  • 就像Vue2中的计算属性computed一样。。

注意事项

  • 如果value是一个函数,那这个Hook就要写成下面这种看着都麻烦的形式:
useMemo( ( ) => (x) => console.log( x ))
  • 这是一个返回函数的函数。
  • 因为不好用,于是React的开发团队又添加了一个useCallback

useCallback用法

  • useCallback(x=>console.log(x), [m])等价于useMemo(()=>x=>console.log(x),[m])