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.jshard

Co powoduje hydration mismatch w React/Next.js i jak to naprawić?

Tagi
#hydration#ssr#react#bug
Wróć do kategoriiPrzejdź do quizu

Odpowiedź

Dzieje się, gdy HTML z SSR różni się od pierwszego renderu w przeglądarce (np. `Math.random()`, `Date.now()`, warunki na `window`, formatowanie locale). Naprawiasz przez deterministyczny pierwszy render albo przeniesienie wartości client-only do `useEffect`/Client Components.

Odpowiedź zaawansowana

Głębiej

Hydration to moment, gdy React „podczepia” event listenery i porównuje HTML z SSR z pierwszym renderem w przeglądarce. Mismatch pojawia się, gdy HTML z serwera nie zgadza się z tym, co klient renderuje na start.

Najczęstsze przyczyny

  • Niedeterministyczne wartości w renderze: `Math.random()`, `Date.now()`, `crypto.randomUUID()`.
  • Gałęzie zależne od przeglądarki: `typeof window !== 'undefined'` w trakcie renderu.
  • Różnice locale/strefy czasowej (formatowanie dat/liczb).
  • Zmiany layoutu po stronie klienta (pomiar DOM, odczyt `localStorage`) wykonywane w renderze.

Wzorce naprawy

  • Pierwszy render ma być deterministyczny; odczyty client-only przenieś do `useEffect`.
  • Renderuj placeholder na serwerze, a dopiero na kliencie wypełnij wartość.
  • Jeśli widget jest stricte client-only, wczytaj go dynamicznie z wyłączonym SSR.

Przykład

'use client'
import { useEffect, useState } from 'react'

export function Clock() {
  const [now, setNow] = useState<string>('')
  useEffect(() => setNow(new Date().toISOString()), [])
  return <span>{now || '...'}</span>
}

Typowe pułapki

  • `suppressHydrationWarning` jako „uniwersalna naprawa” (maskuje bugi).
  • Formatowanie dat bez ustalonego locale/timezone.

Powiązane pytania

Next.js
Hydration mismatch przy przełączaniu motywu: skąd się bierze i jak temu zapobiec?
#nextjs#react#hydration
Next.js
Renderowanie statyczne vs dynamiczne — jak wymusić dynamiczne i po co?
#ssr#dynamic#cache
Next.js
SSR vs SSG vs ISR
  • Założenie, że środowisko serwera i klienta jest identyczne (nie jest).
  • — jaka jest różnica w Next.js?
    #ssr#ssg#isr
    Next.js
    Co robi dyrektywa `'use client'`?
    #use-client#client-component#react
    Next.js
    SSR vs SSG?
    #nextjs#rendering#ssr