Bagaimana menerapkan SSR dan Hidrasi sisi klien di Next.js

 – Beragampengetahuan
3 mins read

Bagaimana menerapkan SSR dan Hidrasi sisi klien di Next.js – Beragampengetahuan

Contents

Mekanisme perakitan dan pembaruan data di SSR dan Hidrasi

Artikel ini menjelaskan alur kerja untuk rendering sisi server (SSR) dan hidrasi sisi klien di Next.js. Ini mencakup proses injeksi data sisi server, hidrasi sisi klien, dan mekanisme untuk memastikan bahwa data diperbarui secara tepat waktu (misalnya, self.__next_f). Selain itu, kami mendiskusikan skenario pemrosesan page.js Muat sebelum data.

1. Alur kerja rendering sisi server (SSR).

a) Server memperoleh data

Dalam kerangka SSR seperti Next.js, data yang diperlukan untuk halaman diperoleh di sisi server, biasanya menggunakan getServerSideProps atau getStaticProps.

contoh:

1 export async function getServerSideProps()

2 const res = await fetch('https://api.example.com/data');

3 const data = await res.json();

4 return props: data ;

5

b) Memasukkan data ke dalam HTML

Setelah data diperoleh, data tersebut dimasukkan ke dalam HTML, biasanya menggunakan:

  • tag skrip: Membuat serial data ke JSON dan menyematkannya.
  • variabel global: Menetapkan data ke variabel global, misalnya self.__next_f.

c) Kirim HTML ke klien

HTML yang berisi data dikirim ke klien.

d) Hidrasi klien

Di sisi klien, React dan halaman JavaScript mengekstrak data yang dimasukkan server dan “mengaktifkan” HTML statis menggunakan ReactDOM.hydrate.

2. Detail implementasi

a) Injeksi data sisi server

Data diserialkan ke JSON dan tertanam dalam HTML <script> Label.

contoh:

1 import ReactDOMServer from 'react-dom/server';

2

3 function App( data )

4 return <div>data.message</div>;

5

6

7 export async function getServerSideProps()

8 const data = message: 'Hello, world!' ;

9 return props: data ;

10

11

12 export function renderToStringWithData(App, props)

13 const html = ReactDOMServer.renderToString(<App ...props />);

14 const dataScript = `<script>self.__next_f = $JSON.stringify(props);</script>`;

15 return `

16 <!DOCTYPE html>

17 <html>

18 <head><title>SSR Example</title></head>

19 <body>

20 <div id="root">$html</div>

21 $dataScript

22 <script src="/client.js"></script>

23 </body>

24 </html>

25 `;

26

b) Rehidrasi pelanggan

Klien mengekstrak data darinya self.__next_f dan aktifkan halaman tersebut.

contoh:

1 import React from 'react';

2 import ReactDOM from 'react-dom';

3 import App from './App';

4

5 const data = self.__next_f;

6 ReactDOM.hydrate(<App ...data />, document.getElementById('root'));

3. Pastikan untuk memperbarui self.__next_f tepat waktu

a) Gunakan agen untuk memantau perubahan

satu Proxy Objek dapat melacak perubahan self.__next_f Dan memicu hidrasi ketika data diperbarui.

contoh:

1 self.__next_f = self.__next_f || [];

2

3 self.__next_f = new Proxy(self.__next_f,

4 set(target, prop, value)

5 const result = Reflect.set(target, prop, value);

6 if (prop === 'length' && value > 0)

7 console.log('Data updated:', target);

8 hydrateApp(target);

9

10 return result;

11

12 );

13

14 function hydrateApp(data)

15 const parsedData = JSON.parse(data[0][1]);

16 ReactDOM.hydrate(<App data=parsedData />, document.getElementById('root'));

17

b) Pemantauan data page.js

Skrip menunggu data tersedia sebelum melanjutkan.

contoh:

1 function waitForData() {

2 return new Promise((resolve) =>

3 if (self.__next_f && self.__next_f.length > 0)

4 resolve();

5 else

6 const observer = new MutationObserver(() =>

7 if (self.__next_f && self.__next_f.length > 0)

8 observer.disconnect();

9 resolve();

10

11 );

12 observer.observe(document.body, childList: true, subtree: true );

13

14 );

15 }

16

17 waitForData().then(() =>

18 const data = JSON.parse(self.__next_f[0][1]);

19 ReactDOM.hydrate(<App data=data />, document.getElementById('root'));

20 );

4. Pemrosesan page.js Sebelum memuat data

a) Inisialisasi self.__next_f

Tambahkan skrip inisialisasi di header HTML:

1 <script>

2 self.__next_f = self.__next_f || [];

3 </script>

b) Sematkan data setelah HTML

Sematkan data setelah HTML:

1 <script>

2 self.__next_f.push([1, "\"name\":\"The Octocat\""]);

3 </script>

sebagai kesimpulan

Dengan menerapkan strategi ini, Anda dapat:

  • Pastikan data sisi server dimasukkan dengan benar ke dalam HTML.
  • Promosikan klien untuk mengisi kembali air tepat waktu.
  • Tangani situasi berikut page.js Muat sebelum data.

Praktik ini meningkatkan keandalan dan efisiensi SSR dan hidrasi di Next.js.

rencana pengembangan website



metode pengembangan website

jelaskan beberapa rencana untuk pengembangan website, proses pengembangan website, kekuatan dan kelemahan bisnis pengembangan website
, jasa pengembangan website, tahap pengembangan website, biaya pengembangan website

#Bagaimana #menerapkan #SSR #dan #Hidrasi #sisi #klien #Next.js

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *