Zestawy rozmówBlog

Twoja wymarzona praca? Lets Git IT.
Interaktywna platforma przygotowująca do rozmów technicznych dla nowoczesnych programistów.

XGitHub

Platforma

  • Kategorie

Zasoby

  • Blog
  • O aplikacji
  • FAQ
  • Sugestie

Prawne

  • Polityka prywatności
  • Regulamin

© 2026 LetsGit.IT. Wszelkie prawa zastrzeżone.

LetsGit.IT/Kategorie/Next.js
Next.jseasy

Next.js App Router: Server Component vs Client Component — jaka jest różnica?

Tagi
#nextjs#app-router#rsc#client-component
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

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.

Odpowiedź zaawansowana

Głębiej

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:

  • możesz czytać dane bezpośrednio (DB/ORM/usługi wewnętrzne) bez ujawniania sekretów,
  • zmniejszasz bundel po stronie klienta,
  • poprawiasz wydajność stron w większości statycznych.

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.

Zasady praktyczne

  • Trzymaj drzewo UI „server-first”; Client Components dodawaj na liściach, tylko gdy potrzebujesz interakcji.
  • Przekazuj z serwera do klienta **serializowalne propsy** (bez funkcji, połączeń DB, instancji klas).
  • Jeśli możesz, fetchuj dane w Server Components; client-side fetch zostaw dla danych stricte klienckich.

Przykład

// 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>;
}

Typowe pułapki

  • Zrobienie wysokopoziomowego layoutu jako Client Component (wymusza dużo JS w całym drzewie).
  • Próba użycia `useState`/`useEffect` w Server Components.
  • Przekazywanie nie-serializowalnych wartości z serwera do klienta.

Powiązane pytania

Next.js
Pobieranie danych w App Router: co zmieniają `cache: 'no-store'` i `revalidate`?
#nextjs#fetch#cache
Next.js
Renderowanie statyczne vs dynamiczne w App Router: co sprawia, że trasa staje się dynamiczna?
#nextjs#rendering#static
Next.js
`next/link` i prefetching: co robi i jak można go kontrolować?
#nextjs#link#prefetch
Next.js
Middleware w Next.js: do czego się nadaje i jakie ma ograniczenia?
#nextjs#middleware#edge
Next.js
Route Handlers w App Router: jak je definiujesz i do czego służą?
#nextjs#route-handlers#api
Next.js
Unieważnianie cache: co robią `revalidatePath` i `revalidateTag`?
#nextjs#cache#revalidate