В JS два объекта не равны.
const a = {}, b = {};
console.log(a === b);
Так что я не могу использовать объект в useEffect
(React hooks) в качестве второго параметра, так как он всегда будет считаться ложным (поэтому он будет перерисован):
function MyComponent() {
// ...
useEffect(() => {
// do something
}, [myObject]) // <- this is the object that can change.
}
Выполнение этого (код выше) приводит к выполнению эффекта каждый раз повторный рендеринг компонента, поскольку объект считается не равным каждый раз.
Я могу «взломать» это, передав объект в виде строкового значения JSON, но это немного грязное IMO:
function MyComponent() {
// ...
useEffect(() => {
// do something
}, [JSON.stringify(myObject)]) // <- yuck
Есть ли лучший способ сделать это и избежать нежелательных вызовов эффекта?
Примечание: объект имеет вложенные свойства. Эффекты должны запускаться при каждом изменении внутри этого объекта.