我试图检查我是否为 state 设置了与之前相同的值,是否重新渲染组件,或者如果发现该值相同,则它将避免重新渲染。
如果组件在 state 中接收到相同的值,它是否会重新渲染组件
IT技术
reactjs
2021-05-19 12:45:17
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主题的一部分,并且还给出了示例。这是示例:
其它你可能感兴趣的问题