Будет ли middleware блокировать показ страницы пока useSWR не отработает
Что проверяют
Понимаете ли вы, где и когда выполняется каждая часть: middleware на сервере до ответа, useSWR в браузере после гидратации. Вопрос с подвохом, поэтому сначала уточните, о каком middleware речь: Next.js или собственном middleware SWR.
Как отвечать
Короткий ответ: нет, они не ждут друг друга, потому что работают в разное время и в разных местах.
- middleware Next.js: выполняется на сервере для каждого запроса, подходящего под
matcher, ещё до рендера маршрута. Может переписать адрес, сделать редирект, поставить заголовки. В Next.js 16 файл называетсяproxy.ts, имяmiddleware.tsобъявлено устаревшим. О хуках React он ничего не знает; useSWR: живёт только в клиентском компоненте. На сервере запрос не уходит, в HTML попадает состояние без данных илиfallbackData. Загрузка стартует после монтирования в браузере, а до её конца показывается то, что вы рисуете поisLoading;- middleware SWR (опция
use): обёртка над хуком и фетчером, например для логирования. Сама по себе ничего не блокирует.
Задержку всё же можно получить. Медленный серверный middleware увеличивает время до первого байта, и страница появится позже. Если matcher захватывает /api, тот же код стоит и перед запросом SWR, и данные грузятся дольше. С suspense: true компонент приостанавливается, на его месте виден fallback ближайшего <Suspense>, но остальная страница показывается.
Если данные нужны сразу в HTML, их получают на сервере и передают в SWRConfig через fallback, а SWR дальше только ревалидирует.
Где спотыкаются
Отвечают «middleware ждёт данные», путая серверный слой запроса с клиентским хуком.
Кладут в middleware тяжёлые запросы к базе или внешнему API. Он срабатывает на каждую навигацию и prefetch, и тормозит весь сайт.
Не различают isLoading и isValidating: первый истинен только при загрузке без данных, второй при любой ревалидации, и спиннер по isValidating мигает при каждом возврате на вкладку.