- Dikirim
- 26 Agustus 2026 pukul 03.03 UTC
- Penulis
- kamo
- Commit
- e029a0f
Server- berikutnya menghasilkan komponen klien, jadi 'window', 'dokumen', 'localStorage', 'Sesi Penyimpanan' dan 'navigator' tidak ada selama render yang menghasilkan HTML. Membaca satu dalam tubuh komponen melemparkan ReferenceError pada server, dan membuang di sana adalah halaman kosong daripada yang terdegradasi. Empat komponen melakukannya. FloatingChatWindow membaca window.innerWide / InnerHeight dalam penginisialisasi usstate dan lagi dalam batasan drag; ChatBox menghitung maksimal tinggi dari jendela. InnerHeight; Lightbox dan AddToContactsDialog portaled ke dokumenter - tubuh tanpa penjaga. All four are behind a caller that only mounts them after a aksi pengguna, sehingga server tidak pernah mencapai mereka hari ini - penjaga ini adalah apa yang menjaga bahwa implementasi detail dari pemanggil daripada asumsi load- bantalan. Penginisialisasi posisi FloatingChatWindow juga sedang dihitung ulang pada setiap render untuk nilai yang dibuang setelah pertama; itu malas sekarang. Tambahkan skrip / check-ssr-safe.mjs, yang berjalan setiap berkas 'use client' dengan TypeScript kompiler API dan laporan membaca bahwa terjadi selama render. Ini berjalan dalam tes npm. Mendapatkan analisis yang tepat mengambil tiga koreksi, semua layak direkam karena masing-masing adalah cara untuk menulis cek ini salah: - Memperlakukan setiap Fungsional Deklarasi sebagai "ditangguhkan" membuatnya melaporkan ZERO. A React komponen IS sebuah deklarasi fungsi, dan tubuhnya berjalan selama render. Hanya kecil - kasus satu adalah pembantu dipanggil kemudian. - 'jendela' dan 'dokumen' adalah identifier biasa. Sebuah atribut JSX bernama 'window =', sebuah kunci objek 'dokumen:', dan sebuah prop rusak '{window: editing}' adalah label, tidak membaca - empat komponen nyata menggunakan persis mereka. - Penjaga idiomatik tidak lexically membungkus membaca. 'if (! mount) back null' duduk beberapa pernyataan di atas 'createPortal (x, document.body)', jadi berjalan dari identifikasi tidak pernah menemukannya. Empat komponen sudah aman dengan cara ini, dan cek yang tidak dapat melihat itu akan memiliki orang "memperbaiki" kode yang benar. Dikonfirmasi terhadap penanaman kontrol positif di kedua arah: komponen yang tidak dijaga adalah Dilaporkan, kapal yang dijaga tidak. tsc --noEmit bersihkan seluruh empat komponen dan impor transitif mereka, semua 10 penjaga lulus. Hal ini membersihkan blocker pada menghapus MenmberListExvider mount gerbang, yang adalah apa membuat seluruh aplikasi terotentikasi keluar dari server-diberikan HTML. Menghapus itu adalah terpisah perubahan dan masih ingin melewati rute asap, karena itu akan menjadi pertama kalinya rute ini pernah telah server- diberikan.