Серверные vs Клиентские компоненты
Серверные компоненты - компоненты, которые рендерятся исключительно на сервере.
Возможности:
- ✅ async/await прямо в компоненте
- ✅ Прямой доступ к БД, файловой системе
- ✅ Работа с серверными переменными окружения
- ✅ Тяжелые вычисления (не нагружают клиент)
- ✅ Использование headers(), cookies() из next/headers
Ограничения:
- ❌ Нет useState, useEffect, useReducer
- ❌ Нет браузерных API (window, localStorage, document)
- ❌ Нет событий (onClick, onChange)
- ❌ Нельзя использовать хуки роутера (usePathname, useRouter)
Клиентские компоненты - которые рендерятся и на сервере (для SSR), и на клиенте (гидратация).
Возможности:
- ✅ Все хуки React (useState, useEffect, useContext)
- ✅ Браузерные API (window, localStorage, Intersection Observer)
- ✅ Обработчики событий (onClick, onChange, onSubmit)
- ✅ Хуки Next.js роутера (usePathname, useSearchParams)
- ✅ Сторонние библиотеки с состоянием (Zustand, Redux)
Ограничения:
- ❌ Нельзя использовать async/await напрямую (нужен useEffect или библиотеки)
- ❌ Нет прямого доступа к БД (только через API)
- ❌ Увеличивает размер бандла