Hydration mismatch terjadi ketika markup server tidak sama dengan markup yang di-render di klien, dan itu sangat mungkin muncul saat kita membangun UI container bergaya Davit dengan aliran SSR/SSG ke CSR. Artikel ini langsung membahas cara menjaga konsistensi state awal, memeriksa perbedaan DOM, serta fallback untuk data asinkron agar tampilan tetap stabil dan menarik.

Mengelola Aliran SSR/SSG ke CSR agar Konsisten

Dalam Next.js, komponen container biasanya dirender di sisi server untuk kecepatan awal, lalu dilanjutkan ke CSR di klien. Hydration mismatch sering muncul jika data awal atau atribut yang di-render di server berbeda saat komponen mount di klien.

Strategi utama adalah memastikan data props yang digunakan untuk render awal tetap deterministik. Gunakan getServerSideProps atau getStaticProps untuk menyuplai data penting dan pasangkan dengan state initial yang berdasarkan data tersebut, bukan kalkulasi waktu nyata di client.

export async function getServerSideProps() {
  const layout = await fetchLayoutConfig();
  return { props: { layout } };
}

function Container({ layout }) {
  const [activePanel, setActivePanel] = React.useState(layout.defaultPanel);
  return (
    <div data-container-theme={layout.theme}>...