> Будет ли middleware блокировать показ страницы пока useSWR не отработает (React)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Библио-Глобус
Стек: React
> Пример ответа
Короткий ответ
Нет, middleware не блокирует показ страницы при использовании useSWR. Middleware в Next.js выполняется на сервере до рендеринга страницы, но useSWR - клиентский хук, который запускается только в браузере после гидратации. Страница отрендерится с initial-состоянием (обычно undefined или fallbackData), а useSWR выполнит запрос асинхронно. Для блокировки нужно использовать server-side data fetching (getServerSideProps или generateStaticParams).
Подробное объяснение
Middleware в Next.js - это функция, которая выполняется на edge runtime до того, как запрос достигнет страницы. Она может перенаправлять, переписывать URL или добавлять заголовки, но не влияет на выполнение клиентского кода.
useSWR - это хук для кэширования и повторной валидации данных на клиенте. Он запускается только после того, как React компонент отрендерится в браузере. Middleware завершает свою работу до того, как HTML страницы отправляется клиенту, поэтому useSWR не может быть "заблокирован" middleware.
Если нужно, чтобы данные были доступны до первого рендера, используйте:
- SSR через getServerSideProps
- SSG с revalidate
- fallbackData в useSWR для предзаполнения кэша
На практике
В реальных проектах middleware часто используется для:
- проверки авторизации (редирект на /login)
- A/B тестирования
- гео-блокировки
А useSWR - для:
- подгрузки динамических данных после загрузки страницы
- автоматической ревалидации при фокусе окна
- оптимистичных обновлений
Если нужно защитить страницу от неавторизованного доступа, middleware сделает редирект до того, как страница начнёт рендериться. Но если данные для страницы должны быть доступны сразу - используйте серверный фетчинг.
Пример кода
JAVASCRIPT// middleware.ts - не блокирует useSWRexport function middleware(request) {if (!request.cookies.has('token')) {return NextResponse.redirect('/login')}}// Страница с useSWR - выполнится только в браузереexport default function Dashboard() {const { data } = useSWR('/api/user', fetcher)// data будет undefined при первом рендереreturn <div>{data?.name || 'Загрузка...'}</div>}
Как отвечать на собеседовании
Начни с прямого ответа: "Нет, не блокирует". Объясни разницу между серверным (middleware) и клиентским (useSWR) выполнением. Упомяни, что middleware работает на edge, а useSWR - в браузере после гидратации. Добавь, что для блокировки показа до получения данных нужно использовать серверные методы или fallbackData.
Что проверяет интервьюер
- Понимание жизненного цикла Next.js (middleware → SSR/SSG → клиент)
- Знание разницы между серверным и клиентским кодом
- Умение объяснить, как работают хуки SWR в контексте Next.js
- Понимание trade-off между SSR и клиентским фетчингом
Типичные ошибки
- Путать middleware с API routes - middleware не обрабатывает запросы к данным
- Думать, что useSWR может выполняться на сервере (он клиентский)
- Предлагать использовать middleware для предзагрузки данных - это не его задача
- Забывать про fallbackData как альтернативу для начального состояния
> Похожие задачи по frontend
Насколько комфортно работать с Angular и React при переходе с Angular на React
Где повесить обработчик клика для кнопок при маппинге массива в React?
Как работает useState в Next.js и является ли состояние глобальным или локальным для страницы
Как применяется иммутабельность данных в React
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью