Saya mengalami masalah dengan rendering tanggal saat menggunakan Next.js/React, pesan kesalahannya:
Warning: Text content did not match. Server: "22 Jan 2024, 04.19.12 UTC" Client: "22 Jan 2024, 11.19.12 WIB" time"
Pesan kesalahan diatas muncul ketika saya menyetel timezone Node.js ke UTC untuk mereproduksi kesalahan.
Di komputer lokal normal, tapi ketika saya deploy ke production masalah ini muncul meskipun kalau di production pesan kesalahannya seperti ini:
Uncaught Error: Minified React error #425; visit https://reactjs.org/docs/error-decoder.html?invariant=425 for the full message or use the non-minified dev environment for full errors and additional helpful warnings.
Bagaimana ya biasanya teman-teman mengatasi masalah ini?
Pesan kesalahan seperti itu ngasih tau kita bahwa ada content HTML yang dirender di client tidak cocok dengan teks yang disajikan server.
Untuk melihat HTML asli yang dikirim oleh server (sebelum dievaluasi dan dihidrasi di browser) buka alamat berikut dibrowser: view-source:https:www.example.com/page
ganti https:www.example.com/page
dengan halaman yang bermasalah.
Cari teks yang dimaksud dalam pesan kesalahan di bagian server pakai CTRL + F. Setelah dapet teks server, bandingkan dengan yang terlihat dilayar (buka halaman tanpa view-source:
).
Ini biasanya terjadi pada tanggal, dilokal tidak menimbulkan masalah karena timezone nodejs biasanya sama dengan timezone komputer yang digunakan browser kita.
Tapi di server timezone nya biasanya menggunakan UTC, oleh karena itu karena proses hidrasi terjadi di browser maka tanggal juga akan dievaluasi di browser (client) yang mana timezonenya bisa berbeda.
Untuk mengatasinya tambahkan atribut suppressHydrationWarning
ke tag HTML yang berisi konten bermasalah, misalnya:
function Time() {
return <time suppressHydrationWarning>{new Date().toLocaleString()}</time>;
}
Kamu tau jawabannya?
Ayo bergabung bersama lebih dari 200.000 pengguna lainnya!