intermediate

Client Components

Используйте client components для browser API, обработчиков событий, local state, effects и интерактивных островов.

Client Components выполняются в браузере, проходят hydration и поддерживают state, effects, обработчики событий и browser API. `use client` в начале файла — граница для модуля и его non-server импортов.

Держите client trees компактными: оборачивайте интерактивные виджеты, а не целые страницы, если маршрут не client-only.

					'use client';

import { useState } from 'react';

export function QuantityPicker({ max }: { max: number }) {
  const [qty, setQty] = useState(1);
  return <button onClick={() => setQty((q) => Math.min(max, q + 1))}>+</button>;
}
				

На интервью: стоимость hydration, когда поднимать state в client leaves и запрещённые server imports.

Типовые ошибки: client fetch того, что уже было на сервере, огромные client subtrees для static контента, секреты в env с client-префиксом.

Компромисс: интерактивность против bundle и hydration.

Чеклист:

  • Минимизируйте scope client subtree.
  • Serializable props от server parents.
  • Привилегированные записи — server actions или API.
  • Тяжёлый client code — dynamic import.