今天看到了一篇关于 React 一些 Hook 使用的问题,由于 React 当父组件有状态更新时会默认更新当前下的所有子组件,现在想跟大家讨论一下 “何时该使用 memo 包裹一个组件” ?

以下是我对 memo 的理解以及提问:

1. 没有 Props 的子组件:由于 React 当父组件有状态更新时会默认更新当前下的所有子组件,如果一个没有 props 的子组件使用 memo 进行包裹则会缓存当前的子组件,由于考虑到 React 对使用 memo 的子组件进行缓存处理也会消耗一定的性能,而这种没有 props 的子组件不使用 memo 则父组件更新后则会导致子组件也会一直跟着更新,这时候是否有必要根据 “React 处理子组件使用 memo 的缓存” 和 “子组件里面不断触发更新的成本” 进行对比后才去考虑这个子组件是否需要使用 memo 包括?(当然我之前都是无脑使用 memo 去包裹组件的,现在越想越不对劲)

2. 有 Props 的子组件:当父组件传递具有 memoized 的 props 时,使用 memo 去包裹一个子组件也可以达到缓存子组件的效果,至于我们在父组件常用的 memoized hook 包括 useState、useMemo、 useCallback,这种情况只有 Props 更新时候才会触发子组件的更新,这个维护的问题在于 “子组件接受一个 Function Props 时是否必须在父组件定义该 Function 时使用 useCallback 定义”?

关于这两点我想看看各位平时是怎么去关注 React 子组件更新以及如何维护的问题。
展开
12