Apakah ini 2 cara terpisah untuk membangun aplikasi, atau dapatkah keduanya digunakan bersama?
Mereka bisa digunakan bersama.
Jika kita dapat menggunakannya bersama, bagaimana melakukannya - apakah kita perlu menduplikasi elemen yang sama di sisi server dan sisi klien? Atau, bisakah kita membangun bagian statis aplikasi kita di server, dan bagian dinamis di sisi klien, tanpa koneksi ke sisi server yang sudah di-render?
Lebih baik memiliki tata letak yang sama yang sedang dirender untuk menghindari operasi pengubahan posisi dan pengecatan ulang, lebih sedikit kedipan / kedipan, halaman Anda akan lebih lancar. Namun, itu bukanlah batasan. Anda dapat menyimpan html SSR dengan sangat baik (sesuatu yang dilakukan Electrode untuk mengurangi waktu respons) / mengirim html statis yang akan ditimpa oleh CSR (render sisi klien).
Jika Anda baru memulai dengan SSR, saya sarankan untuk memulai dengan sederhana, SSR bisa menjadi sangat kompleks dengan sangat cepat. Untuk membangun html di server berarti kehilangan akses ke objek seperti jendela, dokumen (Anda memilikinya di klien), kehilangan kemampuan untuk memasukkan operasi asinkron (di luar kotak), dan umumnya banyak pengeditan kode agar kode Anda kompatibel dengan SSR ( karena Anda harus menggunakan webpack untuk mengemas bundle.js Anda). Hal-hal seperti impor CSS, require vs import tiba-tiba mulai menggigit Anda (ini tidak terjadi pada aplikasi React default tanpa webpack).
Pola umum SSR terlihat seperti ini. Server Express melayani permintaan:
const app = Express();
const port = 8092;
// This is fired every time the server side receives a request
app.use(handleRender);
function handleRender(req, res) {
const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
console.log('fullUrl: ', fullUrl);
console.log('req.url: ', req.url);
// Create a new Redux store instance
const store = createStore(reducerFn);
const urlToRender = req.url;
// Render the component to a string
const html = renderToString(
<Provider store={store}>
<StaticRouter location={urlToRender} context={{}}>
{routes}
</StaticRouter>
</Provider>
);
const helmet = Helmet.renderStatic();
// Grab the initial state from our Redux store
const preloadedState = store.getState();
// Send the rendered page back to the client
res.send(renderFullPage(helmet, html, preloadedState));
}
Saran saya untuk orang-orang yang memulai dengan SSR akan menyajikan html statis. Anda bisa mendapatkan html statis dengan menjalankan aplikasi CSR SPA:
document.getElementById('root').innerHTML
Jangan lupa, satu-satunya alasan untuk menggunakan SSR adalah:
- SEO
- Beban lebih cepat (saya akan mendiskon ini)
Retas: https://medium.com/@gagan_goku/react-and-server-side-rendering-ssr-444d8c48abfc