Проверяет понимание механизма сравнения зависимостей в useEffect при одинаковых значениях undefined.
В хуке useEffect React сравнивает значения зависимостей между рендерами с помощью алгоритма Object.is. Этот алгоритм определяет, изменилось ли значение. Если значение было undefined и после ре-рендера снова стало undefined, они считаются одинаковыми, и эффект не будет вызван повторно.
function Component() {
const [state, setState] = useState(0);
const value = undefined; // всегда undefined
useEffect(() => {
console.log('Эффект выполнен');
}, [value]);
return <button onClick={() => setState(state + 1)}>Обновить</button>;
}При каждом клике компонент ре-рендерится, но value остаётся undefined. React сравнивает предыдущее и новое значение с помощью Object.is(undefined, undefined), что даёт true. Поэтому эффект выполнится только при первом монтировании, а не при каждом обновлении.
Понимание этого механизма помогает избежать лишних вызовов эффектов и оптимизировать производительность. Если вы хотите, чтобы эффект реагировал на изменение ссылки на объект, даже если содержимое одинаково, нужно использовать разные ссылки (например, создавать новый объект).
Используйте это знание, чтобы предсказывать поведение эффектов и избегать неожиданных перезапусков. Если зависимость остаётся примитивным значением, таким как undefined, эффект не будет повторяться при ре-рендерах.
Уровень
Рейтинг:
4
Сложность:
3
Навыки
JavaScript
React
Ключевые слова
Подпишись на React Developer в телеграм
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию