Встречается на собеседованиях • сегодня

Как добиться срабатывания useEffect при мутировании объекта в dependence

Чтобы useEffect реагировал на изменения объекта в зависимостях, нужно обеспечить новую ссылку на объект при каждом изменении. React сравнивает зависимости по ссылке, а не по содержимому.

javascript
const [user, setUser] = useState({ name: 'John' });

useEffect(() => {
console.log('User changed');
}, [user]); // Сработает только если user получит новую ссылку

// Неправильно - мутирование существующего объекта
const handleChangeBad = () => {
user.name = 'Alice'; // useEffect не сработает
};

// Правильно - создание нового объекта
const handleChangeGood = () => {
setUser({ ...user, name: 'Alice' }); // useEffect сработает
};

text

Для сложных объектов можно использовать JSON.stringify в зависимостях, но это неэффективно. Лучше разбивать объект на примитивы или использовать хук useDeepCompareEffect из библиотеки react-use.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы