Проверяет понимание зависимостей useEffect в React и умение реагировать на изменения вложенных полей объекта.
В React, когда вы передаете объект в массив зависимостей useEffect, эффект срабатывает только при изменении ссылки на этот объект. Если вы мутируете объект (например, изменяете его поле), ссылка остается той же, и эффект не запускается. Это частая причина багов, когда разработчики ожидают реакцию на изменение полей.
Самый простой способ — указать в зависимостях конкретные поля объекта. Например:
const [user, setUser] = useState({ name: 'Alice', age: 25 });
useEffect(() => {
console.log('Name changed:', user.name);
}, [user.name]); // реагирует только на изменение nameТакой подход работает, если вы знаете, какие поля важны. Если полей много или они динамические, можно использовать useMemo для создания объекта с нужными полями:
const importantFields = useMemo(() => ({ name: user.name, age: user.age }), [user.name, user.age]);
useEffect(() => {
console.log('Important fields changed:', importantFields);
}, [importantFields]);Здесь useMemo возвращает новый объект только тогда, когда изменяются указанные поля, поэтому эффект сработает корректно.
Вывод: Для корректной работы useEffect с объектами всегда указывайте конкретные поля в зависимостях или используйте useMemo для создания стабильной ссылки. Это делает код предсказуемым и избегает лишних срабатываний эффекта.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию