Вопрос проверяет понимание того, как в Next.js организуется управление состоянием с учётом серверного рендеринга, что критично для корректной гидратации и производительности приложения.
Next.js — это фреймворк поверх React, который добавляет серверный рендеринг (SSR), статическую генерацию (SSG) и Server Components. Из-за этого управление состоянием здесь сложнее, чем в обычном SPA: часть кода выполняется на сервере, часть — на клиенте, и состояние должно корректно переноситься между ними.
При серверном рендеринге HTML формируется на сервере, а затем «оживает» на клиенте. Если глобальный стор инициализируется по-разному на сервере и клиенте, React выдаст ошибку гидратации. Поэтому сторы вроде Redux нужно создавать заново на каждый запрос и передавать начальное состояние через props или специальные обёртки.
// app/providers.tsx (Next.js App Router)
'use client';
import { Provider } from 'react-redux';
import { store } from './store';
export function Providers({ children }) {
return <Provider store={store}>{children}</Provider>;
}
// store.ts
import { configureStore } from '@reduxjs/toolkit';
import cartReducer from './cartSlice';
export const store = configureStore({
reducer: { cart: cartReducer },
});
В Server Components состояние вообще не нужно: они рендерятся на сервере и не имеют доступа к хукам. Клиентское состояние живёт только в компонентах с директивой 'use client'.
Итог: в Next.js стоит комбинировать подходы — серверное состояние отдавать React Query или Server Components, глобальное клиентское держать в Zustand или Redux, а локальное и URL-состояние использовать там, где они уместны. Такой микс даёт предсказуемость, хорошую производительность и отсутствие ошибок гидратации.
Frontend developer
Ментор по Frontend
Полное сопровождение до оффера — без дорогих курсов, с оплатой после трудоустройства
Записаться на консультацию