组件级别优化

  • 用React.memo来包装函数组件,当父组件更新时,如果子组件的props没发生变化,传入props的children也不会重新渲染
  • PureComponent:类组件的memo
  • children组合模式:将不变的子组件作为children传入,这样即使父组件的state发生变化,传入的children也不会重新渲染

数据与函数引用缓存

  • useMemo来缓存计算结果,防止每次渲染都要高开销计算:例如大数组过滤,排序
  • useCallback来缓存函数引用,防止函数每次渲染地址都变,导致接收该函数的子组件(配合 React.memo 时)失效而重新渲染。

列表渲染优化

  • 用唯一且稳定的值作为key,而不是列表的index,这样能帮助diff算法复用dom节点:构建自己的React
  • 虚拟列表:如react-window可以用其渲染仅在视口中的列表

加载策略

React.lazy