Server Components renderują się na serwerze, mogą bezpośrednio używać backendu i nie wspierają hooków/eventów. Client Components działają w przeglądarce, mogą używać `useState/useEffect` i handlerów, ale dokładają JS do bundla.
W App Router komponenty są **domyślnie Server Components**. Server Component renderuje się na serwerze i wysyła do klienta lekką reprezentację (bez JS komponentu). Dzięki temu:
Client Components działają w przeglądarce. Służą do interaktywności (stan, efekty, event handlery), ale zwiększają ilość JS wysyłanego użytkownikowi.
// Server Component (domyślny)
export default async function Page() {
const user = await getUser();
return <UserProfile user={user} />;
}
// Client Component
'use client'
function UserProfile({ user }: { user: { name: string } }) {
return <button onClick={() => alert(user.name)}>{user.name}</button>;
}