【发布时间】:2020-01-13 17:08:10
【问题描述】:
问题
useState 总是触发更新,即使数据的值没有改变。
这是该问题的工作演示:demo
背景
我正在使用useState 挂钩来更新一个对象,并且我试图让它仅在该对象中的值发生变化时才更新。因为 React 使用Object.is 比较算法来确定何时应该更新;具有等效值的对象仍然会导致组件重新渲染,因为它们是不同的对象。
例如。即使有效载荷的值保持为{ foo: 'bar' },此组件也将始终重新渲染
const UseStateWithNewObject = () => {
const [payload, setPayload] = useState({});
useEffect(
() => {
setInterval(() => {
setPayload({ foo: 'bar' });
}, 500);
},
[setPayload]
);
renderCountNewObject += 1;
return <h3>A new object, even with the same values, will always cause a render: {renderCountNewObject}</h3>;
};
问题
我是否可以用钩子实现类似shouldComponentUpdate 的东西来告诉react 只在数据更改时重新渲染我的组件?
【问题讨论】:
-
您能否在
useEffect回调中添加您将在shouldComponentUpdate中使用的逻辑,并且仅当新值与payload不同时才调用setPayload?
标签: javascript reactjs react-hooks