Skip to main content
Khi truy cập lại đúng trang hiện tại, không phải lúc nào cũng cần lấy lại toàn bộ dữ liệu của trang từ máy chủ. Thực tế, chỉ chọn một tập con dữ liệu có thể là một cách tối ưu hiệu năng hữu ích nếu bạn chấp nhận một phần dữ liệu trang trở nên cũ. Inertia hỗ trợ việc này thông qua tính năng “partial reload”. Ví dụ, xét page “danh sách người dùng” chứa danh sách user và tùy chọn lọc user theo công ty. Ở request đầu tiên tới page, cả prop userscompanies được truyền vào page component. Tuy nhiên ở các visit sau tới cùng page, chẳng hạn để lọc user, bạn chỉ có thể yêu cầu dữ liệu users từ server mà không tải lại companies. Inertia sau đó tự động merge partial data server trả về với dữ liệu đã có trong memory phía client. Partial reload chỉ hoạt động với các lần truy cập đến cùng một page component.

Chỉ lấy một số prop nhất định

Để thực hiện partial reload, dùng tùy chọn visit only để chỉ định dữ liệu máy chủ cần trả về. Tùy chọn này là một mảng các key tương ứng với key của props.

Loại trừ một số prop nhất định

Ngoài tùy chọn visit only, bạn cũng có thể dùng tùy chọn except để chỉ định dữ liệu máy chủ cần loại trừ. Tùy chọn này cũng là một mảng key tương ứng với key của props.

Cú pháp rút gọn của router

Vì partial reload chỉ có thể thực hiện trên đúng page component mà người dùng đang ở, gần như lúc nào cũng hợp lý khi dùng phương thức router.reload(), phương thức này tự động dùng URL hiện tại.

Sử dụng liên kết

Bạn cũng có thể thực hiện partial reload bằng liên kết Inertia thông qua thuộc tính only.

Đánh giá dữ liệu theo kiểu lazy

Để partial reload đạt hiệu quả cao nhất, hãy dùng cả lazy data evaluation khi trả props từ route hoặc controller phía máy chủ. Bạn có thể thực hiện bằng cách bọc toàn bộ dữ liệu trang tùy chọn trong một closure.
Khi Inertia thực hiện request, nó sẽ xác định dữ liệu nào thực sự cần thiết rồi mới evaluate closure. Điều này có thể cải thiện đáng kể hiệu năng của những trang có nhiều dữ liệu tùy chọn. Ngoài ra, Inertia cung cấp method Inertia::optional() để chỉ định một prop không bao giờ được đưa vào trừ khi được yêu cầu rõ ràng bằng tùy chọn only:
Ngược lại, bạn có thể dùng phương thức Inertia::always() để chỉ định một prop luôn phải được gửi kèm, kể cả khi prop đó không được yêu cầu rõ ràng trong partial reload.
Dưới đây là tóm tắt của từng cách tiếp cận:

Giữ lỗi

Vì Laravel adapter chia sẻ error bằng Inertia::always(), chúng có trong mọi response, kể cả partial reload không chạy validation. Điều này có nghĩa error bag rỗng từ server sẽ ghi đè validation error phía client hiện có. Bạn có thể dùng tùy chọn preserveErrors để giữ error hiện tại khi server không trả error mới.

Kết hợp với Once Props

Bạn có thể chain modifier once() vào một optional prop để đảm bảo dữ liệu chỉ được resolve một lần và được client ghi nhớ qua các lần điều hướng tiếp theo.
Để biết thêm về once props, xem tài liệu once props.

Tài liệu chính thức

Bài dịch này được đối chiếu từ tài liệu Inertia.js v3 chính thức. Nếu có khác biệt do phiên bản hoặc cập nhật mới, hãy ưu tiên tài liệu chính thức làm nguồn tham chiếu.