对于一个函数组件来说,
props
和state
的变化都会引起组件的重新渲染,如果我们只关心props
变化,而组件内部state变化我们不想此组件重新渲染,可以使用React.memo
,它类似于class组件中的生命周期shouldComponentUpdate
,但是它不是一个hook.
1 | const Button = React.memo((props) => { |
这不是一个 Hook 因为它的写法和 Hook 不同。React.memo
等效于 PureComponent
,但它只比较 props。(你也可以通过第二个参数指定一个自定义的比较函数来比较新旧 props。如果函数返回 true,就会跳过更新。)
React.memo
不比较 state,因为没有单一的 state 对象可供比较。但你也可以让子节点变为纯组件,或者 用 useMemo
优化每一个具体的子节点。
1 | React.memo(function MyComponent (props) { |
1 | function SomeComp({prop1, prop2}) { |
React.memo
的第二个参数可以传入一个函数来比较新旧props,函数返回为true时,会跳过更新.