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的对象不同的引用