Я пытаюсь понять, как реагирует useEffect работает с объектами.
Вот пример, который поможет продемонстрировать мой вопрос:
export function UseEffectHook() {
const initialState = {
firstName: "Joe",
lastName: "Smith",
address: {
home: "123 street"
}
};
const [user, setUser] = useState(initialState);
const [count, setCount] = useState(0);
useEffect(() => {
console.log("triggered");
}, [user]);
return (
<div>
<p>useEffect - Practice with different deps</p>
{JSON.stringify(user)}
<label>Firstname:</label>
<input
type="text"
onChange={e => setUser({ ...user, firstName: e.target.value })}
/>
<br />
<label>Lastname:</label>
<input
type="text"
onChange={e => setUser({ ...user, lastName: e.target.value })}
/>
<button onClick={() => setCount(count + 1)}>Button</button>
</div>
);
}
Я прочитал, что размещение объекта в качестве зависимости в хуке useEffect не работает, потому что о том, как объекты сравниваются между рендерами.
Моей первоначальной мыслью было в этом примере нажать кнопку, и обновление счетчика также должно привести к обновлению хука useEffect. Это не тот случай, и useEffect не запускается повторно.
Я не могу найти достаточно надуманный пример, чтобы помочь продемонстрировать, когда и почему useEffect перезапускается с использованием объектов. Любая помощь будет принята с благодарностью.