391 - 《React Memo》

发布于 2023年12月25日

汇总下关于 memo 相关的知识点。

1、React.memo 是一个非常有用的工具。它允许我们对组件本身进行 memorize。如果组件的 re-render 是由其父组件触发,且这个组件被 React.memo 包裹时,那 React 会停下来检查它的 props。如果所有的 props 都没有变化,那么组件将不会被 re-render。

2、memo props 通常是个反模式。比如下面场景的 useCallback 没有必要,因为 Component re-render 时,其子组件肯定会 re-render,加不加 onClick 的 useCallback 其实没有意义。

function Component() {
  const onClick = useCallback(() => {}, []);
  return <button onClick={onClick} />;
}

3、需要 memo props 通常有两个场景。1)这个 props 被当做 useEffect、useMemo、useCallback 等 hook 的依赖时,被用作下游组件中 hook 依赖也算。

function Parent() {
  // 应该要 memo
  const fetch = () => {};
  return <Child onMount={fetch} />
}

function Child({ onMount }) {
  useEffect(() => {
    onMount();
  }, [onMount]);
}

2)当组件被 React.memo 包裹时。比如下方的 data 和 onChange,通过 useMemo 和 useCallback 可以保持引用稳定,从而避免 ChildMemo 的 re-render。

const Child = ({ data, onChange }) => {};
const ChildMemo 

内容预览已结束

此内容需要会员权限。请先登录以查看完整内容。