Product CRUD: full sức mạnh Inertia.js
Đây là sample trung tâm của phần Samples & Thực chiến. Ta chỉ dùng một modelProduct rất đơn giản để phần lớn sự chú ý nằm ở Frontend và runtime model của Inertia.
Sample này target Inertia.js v3 + Laravel + React + TypeScript. Toàn bộ source companion nằm trong
examples/product-crud/ để bạn copy từng file vào project thật.Mục tiêu cuối cùng
Sau khi hoàn thành, một màn hình CRUD duy nhất sẽ minh họa gần như toàn bộ nhóm capability Inertia thường dùng trong ứng dụng business:Model cố tình đơn giản
Điều quan trọng nhất: Inertia không biến app thành REST API
CRUD này không cần viết:Kiến trúc state
Đây là rule quan trọng nhất của sample:Cấu trúc source companion
Luồng Index
Luồng Create/Edit
Luồng Optimistic toggle
Nên đọc theo thứ tự
1. Backend contract
Backend mỏng, props có chủ đích và redirect flow đúng kiểu Inertia.
2. Index frontend
Search, filter, sort, pagination, partial reload, deferred, prefetch và optimistic update.
3. Form frontend
useForm đầy đủ: validation, dirty, loading, cancel, remember và transform.4. Upload ảnh
Preview, progress, validation, replace/remove ảnh và multipart method spoofing.
5. Advanced UX
Tại sao từng capability được chọn và các failure mode production.
Definition of Done
CRUD chỉ được xem là “đủ để học Inertia” khi người đọc giải thích được vì sao:- filter phải ở URL thay vì local-only state;
- partial reload chỉ nên request prop cần đổi;
- deferred prop không nên chứa dữ liệu bắt buộc cho first paint;
- prefetch chỉ hữu ích cho navigation có xác suất xảy ra cao;
- optimistic update cần rollback semantics rõ;
- validation vẫn nên ở server;
- mutation thành công nên redirect thay vì client tự vá mọi state;
preserveStatekhông phải lý do để giữ state sai ownership.