Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про JavaScript: useState, lazy initialization, React hooks, state

Зачем в useState можно передать функцию вместо значения? В чём отличие и когда это нужно?

Проверяет понимание ленивой инициализации состояния в React и разницы между передачей значения и функции в useState.

Короткий ответ

Передача функции в useState позволяет выполнить инициализацию состояния только один раз при первом рендере. Это полезно, когда начальное значение требует сложных вычислений или чтения из localStorage. В отличие от передачи значения, функция не будет вызываться при каждом обновлении компонента, что повышает производительность.

Длинный ответ

Что такое ленивая инициализация в useState?

В React хук useState может принимать не только значение, но и функцию. Когда передаётся функция, React вызывает её только один раз — при первом рендере компонента. Это называется ленивой инициализацией (lazy initialization). Результат вызова функции становится начальным состоянием.

Когда это нужно?

Ленивая инициализация полезна, когда начальное состояние требует дорогостоящих операций: чтение из localStorage, сложные математические вычисления, парсинг больших данных. Без неё эти операции выполнялись бы при каждом рендере, даже если состояние уже инициализировано.

Пример кода

// Плохо: вычисление при каждом рендере
const [state, setState] = useState(expensiveComputation());

// Хорошо: вычисление только один раз
const [state, setState] = useState(() => expensiveComputation());

// Пример с localStorage
const [theme, setTheme] = useState(() => {
  const saved = localStorage.getItem('theme');
  return saved ? saved : 'light';
});

Отличие от передачи значения

Если передать значение, оно будет вычислено при каждом рендере (если это выражение). Функция же вызывается только один раз. Это особенно важно для тяжелых операций или когда начальное значение зависит от пропсов, которые могут меняться.

Вывод

Используйте ленивую инициализацию в useState, когда начальное состояние требует дорогих вычислений или асинхронных операций. Это улучшает производительность и делает код более предсказуемым.

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию

Уровень

  • Рейтинг:

    4

  • Сложность:

    4

Навыки

  • JavaScript

    JavaScript

  • React

    React

Ключевые слова

#useState

#lazy initialization

#React hooks

#state

Подпишись на React Developer в телеграм

Frontend developer

tech
tech
tech
tech
tech
tech
tech
tech
tech

Ментор по Frontend

Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства

Записаться на консультацию