Reactjs 反应钩设置状态

Reactjs 反应钩设置状态,reactjs,react-hooks,Reactjs,React Hooks,使用当前值触发设置状态是否会对重新渲染作出反应 在设置新值之前,是否应将其与当前值进行比较 const [value, setValue] = useState(123); /*.....*/ const newValue = whatever(); /* do not trigger render if the value still the same */ if (newValue !== value) setValue(newValue); // like this // or se

使用当前值触发设置状态是否会对重新渲染作出反应

在设置新值之前,是否应将其与当前值进行比较

const [value, setValue] = useState(123);

/*.....*/

const newValue = whatever();

/* do not trigger render if the value still the same */
if (newValue !== value) setValue(newValue); // like this
// or
setValue(newValue); // or just simply like this

React是智能的,将在重新渲染排队之前检查值以进行比较

如果update函数返回与当前状态完全相同的值,则将完全跳过后续的重新渲染

有关更多信息,请参阅他们的文档


一个重要的警告是,由于它使用了用于相等性检查的,它就像您对字符串或数字等简单变量所期望的那样,在值相等时跳过,但是对于对象(在
{}
中的事物),它不检查值,而只是检查对对象的引用是否相同。 这意味着两个相同的对象将被视为不相等,并导致重新渲染,而如果您更改了一个对象的内容,但整个对象相同,则将被视为相等而不重新渲染。

使用:

稍后在代码中:

setValue(123)
setValue({myCoolNumber: 123})
不会重播的

但如果改用:

稍后在代码中:

setValue(123)
setValue({myCoolNumber: 123})
在这种情况下,它将执行RERERENDER,因为您正在将一个对象传递给函数setValue,并且该对象是与您第一次传递给useState的对象不同的引用