Зачем бывает нужен import React?
Основы React
Исторически import React from 'react' был обязателен в каждом файле с JSX; после React 17 — нужен только для явного использования API из React.
Почему был нужен раньше
До React 17 JSX компилировался в вызовы React.createElement:
const el = <div className="box">Привет</div>;
// компилировалось в:
const el = React.createElement('div', { className: 'box' }, 'Привет');Скомпилированный код обращается к идентификатору React — без импорта падал ReferenceError, даже если в исходнике «React не используется». Отсюда правило «JSX в файле — импортируй React».
Что изменил новый JSX-трансформ (React 17+)
Компилятор сам вставляет импорт из спец-модуля:
import { jsx as _jsx } from 'react/jsx-runtime'; // добавляет компилятор
const el = _jsx('div', { className: 'box', children: 'Привет' });Ручной import React для JSX больше не нужен (при настроенном jsx: 'react-jsx' в TS/Babel — дефолт современных шаблонов).
Когда import из react нужен сегодня
Только для реального использования API:
import { useState, useEffect, memo, createContext } from 'react'; // хуки и утилиты
import React from 'react'; // если нужны React.memo, типы React.FC, классы- хуки, memo, lazy, Context;
- классовые компоненты (extends React.Component);
- типы в TS (React.ReactNode) — впрочем, и они импортируются именованно.
Коротко для собеседования
Раньше JSX компилировался в React.createElement — идентификатор React требовался в области видимости каждого JSX-файла. С React 17 новый трансформ импортирует jsx-runtime автоматически, и import React нужен только когда явно используешь API: хуки, memo, классы, типы.