> Как оптимизировать тяжелую функцию в React с помощью ленивой инициализации? (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: IT-One
Стек: React
> Пример ответа
Ленивая инициализация в React применяется для отложенного вычисления начального состояния или создания объектов, которые не нужны при каждом рендере. Основной инструмент - функция-инициализатор в useState или useReducer.
Пример с useState:
Вместо:
JSXconst [data, setData] = useState(expensiveComputation()); // вызывается при каждом рендере
Используйте:
JSXconst [data, setData] = useState(() => expensiveComputation()); // вызывается только при монтировании
Для тяжелых вычислений, зависящих от пропсов:
JSXfunction HeavyComponent({ items }) {const [processed, setProcessed] = useState(() => {// выполняется один раз при первом рендереreturn items.map(item => heavyTransform(item));});// ...}
Ленивая инициализация для useRef:
Если нужно создать тяжелый объект (например, экземпляр класса), используйте:
JSXconst heavyObj = useRef(null);if (heavyObj.current === null) {heavyObj.current = new HeavyClass(); // выполняется один раз}
Важно: функция-инициализатор должна быть чистой (без сайд-эффектов) и выполняться синхронно. Для асинхронной загрузки используйте useEffect или библиотеки вроде react-query.
> Похожие задачи по frontend
Почему хуки нельзя вызывать внутри условий и как это связано с жизненным циклом React-компонента
Какая последовательность рендеров и эффектов в React при монтировании и обновлении компонента?
Какие инструменты используются для сложных форм с зависимыми полями в React?
Как интегрировать компонент с внешней валидацией в React?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью