Product CRUD: Advanced UX & failure modes
Một CRUD “nhanh” không chỉ là thêm spinner. Bạn cần hiểu state nào đang stale, request nào có thể overlap và response nào là canonical.1. Partial reload không phải client cache tùy ý
Khi filter bảng:stats vẫn giữ giá trị hiện có.
Điều này tạo một câu hỏi quan trọng:
Stats có cần phản ánh filter hiện tại không?Trong sample: không. Stats là global totals nên giữ nguyên được. Nếu stats phụ thuộc filter thì phải:
2. Deferred phải có fallback semantics
rescue: true, thêm trạng thái logic thứ tư:
3. Prefetch có freshness trade-off
- create page tĩnh;
- edit page ít biến động;
- navigation có probability cao.
- dữ liệu cực nhạy thời gian;
- hàng trăm link trên table được prefetch đồng loạt;
- page cần nhiều truy vấn hoặc thời gian xử lý nhưng người dùng hiếm khi mở.
4. Optimistic update cần invariant nhỏ
Sample toggle:5. preserveState không sửa được state ownership sai
Nếu URL là:
preserveState: true chỉ giữ inconsistency lâu hơn.
Rule:
6. Search request overlap
Debounce giảm overlap nhưng không loại bỏ hoàn toàn. User có thể:7. Flash và recentlySuccessful phục vụ hai scope khác nhau
recentlySuccessful.
8. Loading không nên blank toàn page
Sai:9. Error boundary theo phạm vi
Phân biệt:Something went wrong.
10. Khi CRUD lớn lên
Khi Product index có thêm:- bulk actions;
- export;
- column preferences;
- inline editing;
- background job status;