Salah satu keuntungan terbesar dari React.js adalah rendering sisi server . Masalahnya adalah bahwa fungsi kuncinya React.renderComponentToString()
sinkron sehingga tidak mungkin memuat data asinkron apa pun saat hierarki komponen dirender di server.
Katakanlah saya memiliki komponen universal untuk berkomentar yang dapat saya jatuhkan di mana saja di halaman. Ini hanya memiliki satu properti, beberapa jenis pengenal (misalnya id artikel di bawah ini tempat komentar ditempatkan), dan yang lainnya ditangani oleh komponen itu sendiri (memuat, menambah, mengelola komentar).
Saya sangat menyukai arsitektur Flux karena ia membuat banyak hal menjadi lebih mudah, dan tokonya sempurna untuk berbagi status antara server dan klien. Setelah toko saya yang berisi komentar diinisialisasi, saya hanya dapat membuat serial dan mengirimkannya dari server ke klien di mana ia dapat dengan mudah dipulihkan.
Pertanyaannya adalah bagaimana cara terbaik untuk mengisi toko saya. Selama beberapa hari terakhir ini saya telah banyak mencari di Google dan menemukan beberapa strategi, tidak ada satupun yang terlihat sangat bagus mengingat seberapa besar fitur React ini "dipromosikan".
Menurut pendapat saya, cara paling sederhana adalah mengisi semua toko saya sebelum rendering sebenarnya dimulai. Itu berarti di suatu tempat di luar hierarki komponen (terhubung ke router saya misalnya). Masalah dengan pendekatan ini adalah saya harus cukup banyak mendefinisikan struktur halaman dua kali. Pertimbangkan halaman yang lebih kompleks, misalnya halaman blog dengan banyak komponen berbeda (posting blog aktual, komentar, posting terkait, posting terbaru, aliran twitter ...). Saya harus mendesain struktur halaman menggunakan komponen React dan kemudian di tempat lain saya harus menentukan proses pengisian setiap toko yang diperlukan untuk halaman ini. Bagi saya, itu bukan solusi yang bagus. Sayangnya sebagian besar tutorial isomorfik dirancang dengan cara ini (misalnya tutorial fluks yang hebat ini ).
React-async . Pendekatan ini sempurna. Ini memungkinkan saya untuk menentukan dalam fungsi khusus di setiap komponen bagaimana menginisialisasi status (tidak peduli apakah secara sinkron atau asinkron) dan fungsi ini disebut sebagai hierarki yang dirender ke HTML. Ia bekerja sedemikian rupa sehingga komponen tidak dirender hingga status benar-benar diinisialisasi. Masalahnya adalah itu membutuhkan Seratyang, sejauh yang saya pahami, ekstensi Node.js yang mengubah perilaku JavaScript standar. Meskipun saya sangat menyukai hasilnya, saya tetap merasa bahwa alih-alih menemukan solusi, kami mengubah aturan permainan. Dan saya pikir kita seharusnya tidak dipaksa melakukan itu untuk menggunakan fitur inti React.js ini. Saya juga tidak yakin tentang dukungan umum dari solusi ini. Apakah mungkin menggunakan Fiber pada hosting web Node.js standar?
Saya berpikir sedikit sendiri. Saya belum benar-benar memikirkan detail implementasi tetapi gagasan umumnya adalah bahwa saya akan memperluas komponen dengan cara yang mirip dengan React-async dan kemudian saya akan berulang kali memanggil React.renderComponentToString () pada komponen root. Selama setiap pass, saya akan mengumpulkan callback yang diperpanjang dan kemudian memanggil mereka di dan dari pass untuk mengisi toko. Saya akan mengulangi langkah ini sampai semua penyimpanan yang diperlukan oleh hierarki komponen saat ini akan terisi. Ada banyak hal yang harus diselesaikan dan saya sangat tidak yakin dengan penampilannya.
Apakah saya melewatkan sesuatu? Apakah ada pendekatan / solusi lain? Saat ini saya sedang berpikir untuk menggunakan cara react-async / fibres tetapi saya tidak sepenuhnya yakin tentang hal itu seperti yang dijelaskan pada poin kedua.
Diskusi terkait di GitHub . Ternyata, tidak ada pendekatan resmi atau bahkan solusi. Mungkin pertanyaan sebenarnya adalah bagaimana komponen React dimaksudkan untuk digunakan. Seperti lapisan tampilan sederhana (cukup banyak saran saya nomor satu) atau seperti komponen mandiri dan mandiri nyata?