Skip to main content

8 scenario tổng hợp: chọn đúng sức mạnh Inertia

Trang này không dạy API theo từng feature. Mỗi scenario bắt đầu từ vấn đề sản phẩm rồi mới chọn capability Inertia.

Decision map nhanh

Scenario 1 — Admin table có search/filter/sort

Requirement:
Pattern:
Server dùng closure cho prop có chi phí xử lý cao:
Đây là default pattern rất mạnh cho admin/business app.

Scenario 2 — Dashboard có KPI query chậm

Requirement:
Pattern:
Mental model: prioritize first paint, không phải “defer để query biến mất”. Query vẫn chạy, chỉ đổi critical path.

Scenario 3 — Edit drawer/modal

Requirement:
Pattern:
Kết hợp isDirty, errors, processing và key theo entity identity. Nếu modal unmount khi đóng và request dài, cần quyết định rõ request nên tiếp tục hay bị cancel.

Scenario 4 — Toggle bookmark/favorite/status

Requirement:
Pattern:
Đây là optimistic UX đúng chỗ. Không copy pattern này sang payment.

Scenario 5 — Upload avatar/file

Requirement:
Pattern tư duy:
UI cần hiển thị progress từ form thay vì tự xây XMLHttpRequest layer riêng nếu request vẫn thuộc Inertia form lifecycle.

Scenario 6 — Export report chạy background

Requirement:
Pattern:
Không cần WebSocket nếu business requirement chấp nhận vài giây latency.

Scenario 7 — Activity feed rất dài

Requirement:
Pattern:
Đây là lúc merge props / infinite scrolling hữu ích hơn tự dựng Redux list cache.

Scenario 8 — Gọi API thứ ba không phải page visit

Ví dụ search postcode từ external service hoặc preview một API endpoint. Không phải request nào cũng nên trở thành Inertia navigation. Với v3, useHttp phù hợp cho HTTP request độc lập nhưng vẫn muốn lifecycle state tương tự form. Mental model:

Anti-pattern map

Câu hỏi tự kiểm tra trước khi code

  1. State này thuộc URL, server, form hay interaction local?
  2. Request này là page visit hay HTTP call độc lập?
  3. Prop nào thật sự cần cho first paint?
  4. Khi filter, prop nào cần refresh?
  5. Có thể prefetch vì user nhiều khả năng click không?
  6. Mutation có đủ nhỏ và reversible để optimistic không?
  7. Failure sẽ rollback UI thế nào?
  8. Back/Forward có restore đúng mental model không?
Trả lời được tám câu này thường quan trọng hơn nhớ tên từng option.

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

Nội dung thực chiến trong bài được xây dựng dựa trên API và nguyên lý của Inertia.js v3 Documentation. Khi áp dụng vào dự án, hãy đối chiếu API cụ thể với tài liệu chính thức theo phiên bản bạn đang sử dụng.