Di Next.js App Router, error boundary dapat didefinisikan sebagai file dengan konvensi penamaan error.js
atau error.tsx
. File ini menerima properti reset
yang memungkinkan komponen di-render ulang untuk menghilangkan halaman error. Namun, ketika menggunakan reset
pada server component, komponen tersebut tidak akan di-reset. Perilaku ini sesuai, karena server component tidak melakukan re-render seperti client component. Sebagai gantinya, perlu menggunakan router.refresh()
untuk memuat ulang server component, kemudian memanggil reset()
untuk melakukan re-render dan menghilangkan error boundary.
Masalahnya adalah ketika kedua fungsi ini dipanggil bersamaan, error boundary tidak selalu hilang meskipun langkah-langkah yang dilakukan sudah benar. Hal ini karena router.refresh()
mungkin belum selesai (terutama jika ada proses fetching data dari server), sehingga reset()
dipanggil pada data yang masih lama. Karena router.refresh()
adalah operasi sinkron, await
tidak bisa digunakan. Dalam kasus ini, startTransition
bisa membantu dengan memungkinkan React menangani pembaruan berdasarkan kapan masing-masing aksi selesai.
function recover() { startTransition(() => { router.refresh(); reset(); }); }