react性能优化那些事

116 阅读1分钟

前置知识

父组件render,所有的子组件都会render。

组件的state、props、context都不变时,触发默认的性能优化(组件不render)。

react默认是全等比较。特点:高效,但命中率低。

react提供了一些性能优化api。特点:存在性能损耗,但命中率高。

深层探究

减轻state

为了更优的性能,可以减少父组件中的state。

方式如下:

  • 只存储跟组件渲染有关的数据。
  • 不用做渲染的数据不要放在state中。
  • 可以将数据直接挂载到this中。

类组件性能优化

1.使用shouldComponentUpdate钩子

该钩子接收两个参数:prevProps, nextState。

该钩子return false时,该组件不会re-render。

该钩子return true时,该组件会re-render。

2.使用React.PureComponent

PureComponent内部自动实现了shouldComponentUpdate钩子。

自动通过比对前后两次的props和state的值,来决定是否重新渲染组件。

注意:这里的比较是浅层比较(shallow compare)。只比较引用的地址。


函数组件性能优化

1.使用React.memo函数(高阶组件)

React.memo(functionComponent)

功能和React.PureComponent类似。也是浅层对比(shallow compare)。

注意:父组件给子组件传入函数时,子组件也会更新。

2.使用useCallback钩子

const addNum = useCallback(()=>{...}, [])

useCallback和React.memo配合使用。

useCallback缓存的是函数。

3.使用useMemo钩子

类似vue中的计算属性。

useMemo一般用来缓存计算的结果。