Hỏi về next js getStaticProps rehydration

37 lượt xem

profile picture

Ẩn danh

Ngày 25 Tháng 05

Hiện tại thì lý thuyết SSG, ISR, SSR mình đều nắm. Nhưng trong quá trình code với next js thì mình luôn gặp lỗi cảnh báo client, server xung đột. Mình đã thử vẽ page trước rồi nhưng vẫn bị lỗi này, ko biết tại sao sao. 1. Ví dụ nếu page được tạo bằng SSG và HTML thì do page được tạo từ HTML nên sẽ pre rendering screen. Như vậy sau khi rendering (quyền điều khiển chuyển qua react) thì khi load màn hình, CSR có loading phần HTML đã được tạo trước đó ko? Hay sẽ tạo mới trên page có sẵn? 2. Nếu tạo page mới thì nội dung file HTML có sẵn đã được pre render trước đó và data do CSR vẽ khác nhau thì next js sẽ xuất cảnh báo match? 2.1 Tại next js, nếu nội dung server, client khác nhau thì lý do xuất cảnh báo match là gì? 3. Tại sao CSR sử dụng html đã tạo sẵn để vẽ page mới?

Đánh giá câu hỏi ngay!

Hãy ấn Up Vote với những câu hỏi cụ thể và chi tiết

Hãy ấn Down Vote với những câu hỏi chưa rõ ràng Careerly sẽ nhắc người hỏi chỉnh sửa lại.

1 câu trả lời

BEST

Ảnh đại diện của Manh Do

Thực ra tất cả thắc mắc của bạn (mình không dám chắc là mình hiểu đúng câu hỏi của bạn) đều dựa trên bản chất của việc hydrate code đã đc render trước (SSG hoặc SSR). Sau khi browser nhận đc html đã đc generate từ trước, nó sẽ ngay lập tức render lên màn hình để user nhìn thấy. Tuy nhiên, browser tiếp tục phải làm thêm một công đoạn đó là hydrate, tức là lặp lại toàn bộ những thứ mà server đã thực hiện kèm theo đó là 1 vài task chỉ có thể làm ở client, vd: khởi tạo virtual dom, sau đó là bind event handler cho ui,... Chỉ trừ việc tạo ra real DOM. Từ đây ta có thể dễ dàng nhận ra, sẽ có một khoảng delay từ lúc user nhìn thấy content cho đến khi anh ta có thể thực sự tương tác với app của bạn. Vậy nên: 1. React sẽ ko tạo lại mà sẽ dùng html đã đc pre rendering. 2. And 2.1: Nó sẽ cảnh báo khi html đã đc render KHÔNG match với virtual DOM trên browser. Ví dụ: bạn render A trên server nhưng lại render B ở client (có thể là render conditionally dựa trên một điều kiện mà giá trị của điều kiện đó ko đồng nhất giữa server và client (vd: typeof window === 'undefined'). Một trường hợp phổ biến khác là bạn render div ở trong span, và điều này là không đc phép. 3. Real DOM sẽ được tái sử dụng chứ không tạo lại từ đầu để render page mới. Vì như vậy là rất lãng phí, không có lý do gì để tạo lại trong khi server đã làm việc đó.

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.

Xem thêm

Đồng ý với Điều khoản dịch vụ Chính sách bảo mật của Careerly

Bạn đã có tài khoản rồi?

Đăng ký ngay bây giờ để đọc toàn bộ câu trả lời!

Cộng đồng lập trình viên sẽ giải đáp tường tận cho bạn.