Skip to main content
Inertia cho phép cập nhật UI ngay lập tức mà không chờ server phản hồi, chẳng hạn tăng bộ đếm like, bật/tắt bookmark hoặc thêm phần tử vào danh sách. Optimistic update áp dụng thay đổi tức thì trong lúc request đang chạy và tự động rollback nếu request thất bại.

Router visits

Bạn có thể nối phương thức optimistic() trước bất kỳ router visit nào. Callback nhận page props hiện tại và nên trả partial update cần áp dụng ngay.
Optimistic update được áp dụng ngay vào props của page hiện tại, vì vậy component re-render với giá trị mới trước khi request được gửi. Khi server phản hồi, Inertia thay dữ liệu optimistic bằng response từ server. Nếu request thất bại, prop tự động được khôi phục về giá trị ban đầu.

Component Form

Component <Form> hỗ trợ optimistic update qua prop optimistic. Vì component quản lý input data nội bộ, form data được cung cấp làm đối số thứ hai của callback.

Form helper

Helper useForm cũng hỗ trợ optimistic update qua cùng phương thức optimistic().

HTTP requests

Hook useHttp cũng hỗ trợ optimistic update. Vì HTTP request không tương tác với page props của Inertia, optimistic callback nhận và cập nhật dữ liệu riêng của form. Khi thất bại, form data được khôi phục về state trước request.

Cách hoạt động

Khi optimistic update được áp dụng:
  1. Prop được trả về được so sánh với page prop hiện tại và chỉ những key thực sự thay đổi mới được snapshot
  2. Giá trị callback trả về được merge vào dữ liệu hiện tại
  3. Request được gửi tới server
  4. Khi thành công, response của server thay thế dữ liệu optimistic
  5. Khi thất bại, chỉ những key đã snapshot được khôi phục, rollback các thay đổi optimistic
Callback nên trả về object partial chỉ chứa các key bạn muốn cập nhật. Các giá trị trả về được shallow-merge với dữ liệu hiện tại.

Tự động rollback

Optimistic state tự động được khôi phục trong một số trường hợp:
  • Validation error (422): Optimistic state được khôi phục và validation error được giữ lại
  • Server error: Khi request thất bại vì bất kỳ lý do nào khác, state ban đầu được khôi phục
  • Visit bị gián đoạn: Khi visit mới ngắt request đang chạy, optimistic state trước đó được khôi phục trước khi optimistic update mới được áp dụng

Cập nhật đồng thời

Nhiều optimistic request có thể chạy cùng lúc. Inertia theo dõi prop nào được mỗi optimistic update chạm tới, và server response sẽ không ghi đè một prop cho tới khi optimistic request cuối cùng sửa prop đó đã resolve.

Tùy chọn inline

Bạn cũng có thể truyền optimistic callback trực tiếp trong visit options thay vì nối method.
Tùy chọn inline cũng hoạt động với các phương thức submit của useHttp.

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.