Skip to main content

Form UX: loading, validation, success & cancel

Một form tốt không chỉ “submit được”. Người dùng cần biết request đang chạy, field nào sai, dữ liệu đã lưu chưa và chuyện gì xảy ra nếu đóng modal giữa chừng.

Mẫu useForm

Phân biệt các state

Không dùng client validation để thay backend validation

Client validation có thể cải thiện UX, nhưng policy/rule cuối cùng vẫn phải ở server. Nếu browser bị bypass, request trực tiếp vẫn phải bị chặn.

Error flow trong Inertia

Với Laravel, validation thường redirect back cùng session errors. Inertia adapter nhận errors ở request kế tiếp và đưa chúng vào form/page props. Vì state của mutation request được preserve phù hợp, input người dùng không cần tự repopulate bằng một REST-style 422 JSON flow. Nếu modal đóng nhưng component chưa điều hướng đi đâu, request có thể vẫn tiếp tục. Nếu business case yêu cầu đóng modal là hủy upload/mutation, gọi form.cancel() khi đóng hoặc dùng Form component với cancelOnUnmount ở nơi phù hợp.

Một form production hoàn chỉnh

Unsaved-change guard

Đừng chặn navigation vô điều kiện; chỉ cảnh báo khi form dirty:
Nếu triển khai browser beforeunload, nhớ cleanup listener và đừng biến nó thành modal khó thoát sau success/reset.

Multi-form page

Mỗi form nên có instance/key riêng:
Không dùng một object errors global rồi tự đoán error thuộc form nào.

Accessibility checklist


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.