<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 thêm nhiều prop. Nhiều prop giống 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 tới partial reload, không phải partial submission. Quy tắc chung: top-level prop dành cho chính việc gửi 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 toàn bộ event visit tiêu chuẩn khi gửi 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.
Hủy submit form
Phương thứccancel hủy submission đang chạy. Nó có sẵn qua slot props, component ref và form context.
cancelOnUnmount để hủy submission đang chạy ngay khi form unmount.
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
Child component lồng sâu có thể cần truy cập form state hoặc method mà không truyền prop qua nhiều tầng. HookuseFormContext cung cấp quyền truy cập state và method của component <Form> cha từ bất kỳ child component nào.
Cả component
<Form> và useFormContext đều nhận generic type parameter để có error và slot prop type-safe. Xem tài liệu TypeScript để biết chi tiết.Precognition
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 server. 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 protocol
để biết chi tiết implementation.
chi tiết.
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 gửi form thành công. Ví dụ, bạn có thể dùng callback onSuccess để reset input về state 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ó form validation error, chúng có sẵn qua thuộc tínherrors. Khi xây ứng dụng Inertia dùng Laravel, form error tự động được điền khi ứng dụng ném 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 cách đặt tùy chọn form.recentlySuccessfulDuration trong cấu hình mặc định của ứng dụng. Giá trị mặc định là 2000 millisecond.
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 data và error của form vào history state, bạn có thể cung cấp form key duy nhất làm đối số đầu tiên khi tạo form.Loại trừ field
Các field nhạy cảm như password có thể được loại khỏi history state bằng phương thứcdontRemember().
Một số trình duyệt kích hoạt hộp thoại “save password” bất cứ khi nào giá trị password field
được ghi vào history state, kể cả không gửi form. Loại password
field giúp tránh vấn đề này.
Wayfinder
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
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 server. 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 protocol
để biết chi tiết implementation.
chi tiết.
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 cần đối số để gửi request tới endpoint đã cấu hình.
Response phía máy chủ
Khi dùng Inertia, bạn thường không kiểm tra form response ở phía client như với request XHR/fetch truyền thống. Thay vào đó, route hoặc controller phía server trả redirect sau khi xử lý form, thường redirect tới 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ý validation error, bao gồm error bag và các trường hợp nâng cao, 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 gửi request hoặc form có file, Inertia tự động chuyển request data thành objectFormData. Cơ chế này hoạt động với component <Form>, helper useForm và manual router submission.
Để biết thêm về upload file, bao gồm theo dõi tiến trình, xem tài liệu file uploads.
Optimistic updates
Cả component<Form> và helper useForm đều hỗ trợ optimistic update, cho phép cập nhật UI ngay trước khi server phản hồi. Xem tài liệu optimistic updates để biết thêm.
Submission không qua Inertia
Dùng Inertia để gửi form phù hợp với phần lớn tình huống. Với HTTP request độc lập không kích hoạt page visit, bạn có thể dùng hookuseHttp, cung cấp trải nghiệm phát triển tương tự useForm. Bạn cũng có thể tự do dùng XHR hoặc fetch thông thường với thư viện tùy chọn.