<Form> và helper useForm. Cả hai tích hợp với validation của framework phía máy chủ và xử lý submit form mà không tải lại toàn bộ trang.
Component Form
Inertia cung cấp component<Form> hoạt động gần giống form HTML truyền thống nhưng sử dụng Inertia bên dưới để tránh tải lại toàn bộ trang. Đây là cách đơn giản nhất để bắt đầu làm việc với form trong Inertia.
transform để sửa dữ liệu form trước khi submit. Điều này hữu ích khi cần chèn field bổ sung hoặc transform dữ liệu hiện có, dù hidden input cũng có thể dùng được.
Wayfinder
Khi dùng Wayfinder, bạn có thể truyền object kết quả trực tiếp vào propaction. Component Form sẽ tự suy ra HTTP method và URL từ object Wayfinder.
Giá trị mặc định
Input checkbox
Khi làm việc với checkbox, bạn có thể muốn thêm attributevalue rõ ràng như value="1". Nếu không có value, checkbox được chọn sẽ submit thành "on", giá trị mà một số validation rule phía máy chủ có thể không nhận diện là boolean hợp lệ.
Slot props
Component<Form> expose reactive state và các helper method qua default slot, cho phép truy cập trạng thái xử lý form, lỗi và utility function.
defaults cho phép cập nhật giá trị mặc định của form theo giá trị field hiện tại. Sau khi gọi, các lần reset() tiếp theo sẽ khôi phục field về các mặc định mới này và property isDirty sẽ theo dõi thay đổi so với chúng. Khác với useForm, method này không nhận đối số và luôn dùng toàn bộ giá trị hiện tại của form.
Object errors dùng dotted notation cho field lồng nhau, cho phép hiển thị validation message cho cấu trúc form phức tạp.
Props và options
Ngoàiaction và method, component <Form> nhận nhiều prop khác. Nhiều prop giống hệt các tùy chọn có trong visit options của Inertia.
options thay vì đặt ở top-level để tránh nhầm lẫn. Ví dụ, only, except và reset liên quan đến partial reload, không phải partial submission. Quy tắc chung: prop top-level dành cho chính quá trình submit form, còn options kiểm soát cách Inertia xử lý visit tiếp theo.
Để style form trong lúc đang xử lý, bạn có thể target form inert theo các cách sau.
Sự kiện
Component<Form> phát đầy đủ các event visit tiêu chuẩn khi submit form.
Reset form
ComponentForm cung cấp một số attribute cho phép reset form sau khi submit.
Có thể dùng resetOnSuccess để reset form sau khi submit thành công.
resetOnError để reset form sau khi xảy ra lỗi.
Thiết lập giá trị mặc định mới
ComponentForm cung cấp attribute setDefaultsOnSuccess để đặt các giá trị hiện tại của form làm mặc định mới sau khi submit thành công.
Dotted key notation
Component<Form> hỗ trợ dotted key notation để tạo object lồng nhau từ tên input phẳng. Đây là cách thuận tiện để tổ chức dữ liệu form.
Truy cập bằng code
Bạn có thể truy cập các method của form bằng code thông qua ref. Đây là lựa chọn thay thế cho slot props khi cần kích hoạt action của form từ bên ngoài form.isDirty và errors nên được truy cập qua slot props.
Form context
v2.3.9+ Đôi khi bạn muốn truy cập state hoặc method của form từ các child component lồng sâu mà không phải truyền prop qua nhiều tầng. HookuseFormContext cho phép truy cập state và method của component <Form> cha từ bất kỳ child component nào.
Precognition
v2.3+ Component<Form> tích hợp sẵn hỗ trợ Laravel Precognition, cho phép validation form theo thời gian thực mà không cần sao chép validation rule phía máy chủ sang client.
Precognition yêu cầu hỗ trợ phía máy chủ. Người dùng Laravel nên xem tài liệu Laravel Precognition để biết cách thiết lập. Với framework khác, xem trang giao thức để biết chi tiết triển khai.
validate() với tên field để kích hoạt validation cho field đó. Helper invalid() kiểm tra field có lỗi validation hay không, còn validating cho biết request đang được xử lý.
valid() để kiểm tra field đã pass validation hay chưa.
Validation nhiều field
Bạn có thể validation nhiều field cùng lúc bằng tùy chọnonly. Điều này đặc biệt hữu ích khi xây dựng form dạng wizard, nơi bạn muốn validation toàn bộ field đang hiển thị trước khi sang bước tiếp theo.
Touch và validate
Methodtouch() đánh dấu các field là “touched” mà không kích hoạt validation. Sau đó bạn có thể validation tất cả field đã touched bằng cách gọi validate() không có đối số.
touched() cũng có thể được gọi không đối số để kiểm tra có field nào đã touched hay chưa. Method reset() xóa touched state của các field được reset.
Options
Methodvalidate() nhận object options chứa callback và cấu hình.
validate() chỉ với object options để validation các field cụ thể.
Form helper
Ngoài component<Form>, Inertia còn cung cấp helper useForm khi bạn cần kiểm soát bằng code đối với dữ liệu form và hành vi submit.
get, post, put, patch và delete.
preserveState, preserveScroll và event callback, hữu ích để thực hiện tác vụ sau khi submit thành công. Ví dụ, bạn có thể dùng callback onSuccess để reset input về trạng thái ban đầu.
useForm(), sau đó gọi submit() không đối số để gửi request. Cách này cũng mở khóa validation theo thời gian thực. Xem Precognition để biết chi tiết.
Nếu cần thay đổi dữ liệu form trước khi gửi đến máy chủ, bạn có thể thực hiện thông qua phương thức transform().
processing để theo dõi form có đang được submit hay không. Điều này hữu ích để ngăn submit hai lần bằng cách disable nút submit.
progress, giúp bạn dễ dàng hiển thị tiến độ tải lên.
Lỗi form
Nếu có lỗi validation của form, chúng có sẵn thông qua thuộc tínherrors. Khi xây dựng ứng dụng Inertia dùng Laravel, lỗi form sẽ tự động được điền khi ứng dụng ném ra instance ValidationException, chẳng hạn khi dùng {'$request->validate()'}.
hasErrors. Để xóa lỗi form, dùng phương thức clearErrors().
setErrors().
wasSuccessful sẽ là true. Ngoài ra, form còn có thuộc tính recentlySuccessful, được đặt thành true trong hai giây sau một lần submit thành công. Bạn có thể dùng thuộc tính này để hiển thị thông báo thành công tạm thời.
Bạn có thể tùy chỉnh thời lượng state recentlySuccessful bằng tùy chọn form.recentlySuccessfulDuration trong giá trị mặc định của ứng dụng. Mặc định là 2000 mili giây.
Reset form
Để reset các giá trị của form về giá trị mặc định, bạn có thể dùng phương thứcreset().
reset() và clearErrors(), có thể dùng method resetAndClearErrors() để kết hợp cả hai hành động trong một lần gọi.
Thiết lập giá trị mặc định mới
Nếu các giá trị mặc định của form không còn phù hợp, bạn có thể dùng phương thứcdefaults() để cập nhật chúng. Sau đó, form sẽ được reset về đúng các giá trị này trong lần tiếp theo phương thức reset() được gọi.
Theo dõi thay đổi field của form
Để xác định form có thay đổi nào hay không, bạn có thể dùng thuộc tínhisDirty.
Hủy submit form
Để hủy một lần submit form, dùng phương thứccancel().
Dữ liệu form và history state
Để yêu cầu Inertia lưu dữ liệu và lỗi form vào history state, bạn có thể cung cấp một form key duy nhất làm đối số đầu tiên khi khởi tạo form.Loại trừ field
Đôi khi bạn muốn ngăn một số field được lưu vào history state. Ví dụ, có thể bạn muốn loại password field vì lý do bảo mật.Một số trình duyệt kích hoạt prompt “lưu mật khẩu” mỗi khi giá trị password field được ghi vào history state, kể cả khi chưa submit form. Loại trừ password field giúp tránh vấn đề này.
Wayfinder
v2.0.6+ Khi dùng Wayfinder cùng form helper, bạn chỉ cần truyền object kết quả trực tiếp vào methodform.submit. Form helper sẽ suy ra HTTP method và URL từ object Wayfinder.
Precognition
v2.3+ Tương tự component<Form>, helper useForm hỗ trợ Precognition cho validation thời gian thực. Bạn có thể bật bằng cách chain method withPrecognition() với HTTP method và endpoint dành cho request validation.
Precognition yêu cầu hỗ trợ phía máy chủ. Người dùng Laravel nên xem tài liệu Laravel Precognition để biết cách thiết lập. Với framework khác, xem trang giao thức để biết chi tiết triển khai.
laravel-precognition, bạn cũng có thể truyền method và URL làm các đối số đầu tiên cho useForm().
validate() với tên field để kích hoạt validation cho field đó. Helper invalid() kiểm tra field có lỗi validation hay không, còn validating cho biết request đang chạy.
valid() để kiểm tra field đã pass validation hay chưa.
Touch và validate
Methodtouch() đánh dấu field là “touched” mà không kích hoạt validation. Sau đó bạn có thể validation toàn bộ field touched bằng cách gọi validate() không đối số. Helper touched() kiểm tra field đã touched hay chưa. Method reset() xóa touched state cho các field được reset.
Options
Request validation tự động được debounce. Request đầu tiên chạy ngay, các thay đổi tiếp theo được debounce (mặc định 1500ms). Bạn có thể tùy chỉnh timeout bằngsetValidationTimeout().
validateFiles().
withAllErrors().
submit() không đối số để submit đến endpoint đã cấu hình.
Response phía máy chủ
Khi dùng Inertia, thông thường bạn không kiểm tra response form ở phía client như với request XHR/fetch truyền thống. Thay vào đó, route hoặc controller phía máy chủ trả một response redirect sau khi xử lý form, thường redirect đến trang thành công.<Form>, helper useForm và submit thủ công bằng router. Nó khiến việc xử lý form Inertia rất giống submit form truyền thống phía máy chủ.
Validation phía máy chủ
Cả component<Form> và helper useForm đều tự động xử lý lỗi validation phía máy chủ. Khi máy chủ trả lỗi validation, chúng tự động có trong object errors mà không cần cấu hình thêm.
Khác với request XHR/fetch truyền thống nơi bạn có thể kiểm tra status code 422, Inertia xử lý lỗi validation như một phần của flow dựa trên redirect, giống submit form truyền thống phía máy chủ nhưng không tải lại toàn bộ trang.
Để xem hướng dẫn đầy đủ về xử lý lỗi validation, bao gồm error bag và tình huống nâng cao, hãy xem tài liệu validation.
Submit form thủ công
Bạn cũng có thể submit form thủ công bằng trực tiếp các methodrouter của Inertia mà không dùng component <Form> hoặc helper useForm:
Tải file lên
Khi request hoặc submit form có file, Inertia tự động chuyển dữ liệu request thành objectFormData. Cơ chế này hoạt động với component <Form>, helper useForm và submit thủ công bằng router.
Để biết thêm về tải file, bao gồm theo dõi tiến trình, hãy xem tài liệu tải file.
Submit bằng XHR / Fetch
Dùng Inertia để submit form phù hợp với phần lớn tình huống. Tuy nhiên, nếu cần kiểm soát quá trình submit chi tiết hơn, bạn có thể thực hiện request XHR hoặcfetch thuần bằng thư viện mình chọn.