Skip to main content
Tính năng deferred props của Inertia cho phép trì hoãn việc tải một số dữ liệu trang cho đến sau khi lần render ban đầu hoàn tất. Điều này giúp cải thiện hiệu năng cảm nhận bằng cách cho phép trang ban đầu render nhanh nhất có thể.

Phía máy chủ

Để defer một prop, bạn có thể dùng method Inertia::defer() khi trả response. Method nhận callback trả dữ liệu prop. Callback sẽ được thực thi trong một request riêng sau lần render trang ban đầu.

Nhóm request

Mặc định, toàn bộ deferred prop được fetch trong một request sau khi page ban đầu render. Tuy nhiên, bạn có thể fetch prop song song bằng cách nhóm chúng.
Trong ví dụ trên, props teams, projectstasks được fetch trong một request, còn prop permissions được fetch song song trong request riêng. Tên group là chuỗi tùy ý và có thể đặt theo ý bạn.

Phía client

Ở phía client, Inertia cung cấp component Deferred để quản lý deferred props. Component tự động chờ các deferred prop được chỉ định có sẵn trước khi render children.

Nhiều deferred prop

Nếu cần chờ nhiều deferred prop cùng có sẵn, bạn có thể truyền một array vào prop data.

Chỉ báo đang reload

Khi deferred prop đang được reload qua partial reload, component Deferred cung cấp boolean reloading qua slot. Điều này cho phép hiển thị loading indicator trong khi vẫn giữ dữ liệu đã tải trước đó.
Prop reloadingfalse ở lần tải đầu và chuyển thành true khi partial reload đang chạy cho các deferred key. Nó trở lại false khi reload hoàn tất.

Xử lý lỗi

Mặc định, exception ném ra trong lúc resolve deferred prop sẽ tạo error response. Bạn có thể yêu cầu Inertia rescue các exception này bằng cách truyền rescue: true vào Inertia::defer().
Khi deferred prop được rescue, nó bị loại khỏi response và exception được báo qua exception handler của Laravel. Ở phía client, bạn có thể cung cấp slot rescue cho component Deferred để render fallback UI khi prop tải thất bại.
Rescue state được giữ cho tới khi bạn chủ động reload prop đã rescue. Slot rescue nhận boolean reloading, cho phép disable nút retry hoặc hiển thị loading indicator trong khi reload đang diễn ra.

Kết hợp với Once Props

Bạn có thể nối modifier once() vào deferred prop để đảm bảo dữ liệu chỉ được resolve một lần và được phía 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.