如果组件在 state 中接收到相同的值,它是否会重新渲染组件

IT技术 reactjs
2021-05-19 12:45:17

我试图检查我是否为 state 设置了与之前相同的值,是否重新渲染组件,或者如果发现该值相同,则它将避免重新渲染。

2个回答

类组件

组件在setState调用后无条件地重新渲染状态是否为相同值并不重要,即通过===比较的值

this.setState(state => state); // re-render

或者通过浅层对象比较的相同状态:

this.setState(state => ({...state})); // re-render

为了避免不必要的重新渲染,应该使用PureComponent来阻止组件更新shouldComponentUpdate

React.PureComponent 类似于 React.Component。它们之间的区别在于 React.Component 没有实现 shouldComponentUpdate(),而是 React.PureComponent 通过一个浅层的 prop 和 state 比较来实现它。

如果你的 React 组件的 render() 函数在给定相同的 props 和 state 的情况下呈现相同的结果,你可以在某些情况下使用 React.PureComponent 来提高性能。

请注意,由于在 React 中使用了虚拟 DOM,重新渲染不一定会导致 DOM 重新渲染并且可能具有可接受的性能。

功能组件

useState功能组件中的钩子提供了有状态类组件的替代方案。主要区别之一是如果组件的值相同,则不会重新渲染组件,即通过===比较的值

const [state, setState] = useState({});
...
setState(state => state); // no re-render

否则会重新渲染组件:

setState(state => ({...state})); // re-render

React 文档 - shouldComponentUpdate In Action 中,他们已经详细讨论过它,作为Optimizing Performance主题的一部分,并且还给出了示例。这是示例:

在此处输入图片说明