Skip to main content
Đây là tài liệu Inertia.js v1, phiên bản không còn được duy trì tích cực. Vui lòng tham khảo tài liệu v3.

Submit form

Mặc dù có thể submit form HTML truyền thống với Inertia, cách này không được khuyến nghị vì sẽ làm tải lại toàn bộ trang. Thay vào đó, tốt hơn là chặn việc submit form rồi thực hiện request bằng Inertia.
Như bạn có thể đã nhận thấy trong ví dụ trên, khi dùng Inertia, thông thường bạn không cần kiểm tra response của form ở phía client như khi tự thực hiện request XHR / fetch. Thay vào đó, route / controller phía máy chủ thường trả về một response redirect. Và tất nhiên, không có gì ngăn bạn redirect người dùng quay lại đúng trang trước đó. Với cách tiếp cận này, việc xử lý submit form trong Inertia rất giống xử lý submit form HTML truyền thống.

Validation phía máy chủ

Xử lý lỗi validation phía máy chủ trong Inertia hơi khác so với xử lý lỗi từ request XHR / fetch thủ công. Khi thực hiện request XHR / fetch, bạn thường kiểm tra response có status code 422 rồi tự cập nhật state lỗi của form. Tuy nhiên, khi dùng Inertia, máy chủ không bao giờ trả response 422. Thay vào đó, như ví dụ trên, route / controller thường trả về response redirect — tương tự một lần submit form tải toàn bộ trang truyền thống. Để tìm hiểu đầy đủ về cách xử lý và hiển thị lỗi validation với Inertia, hãy xem tài liệu validation.

Form helper

Vì làm việc với form là nhu cầu rất phổ biến, Inertia cung cấp form helper nhằm giảm lượng boilerplate code cần thiết khi xử lý các lần submit form thông thường.
Để submit form, bạn có thể dùng các phương thức get, post, put, patchdelete.
Các phương thức submit hỗ trợ mọi tùy chọn visit thông thường như preserveState, preserveScroll và callback sự kiện; các callback này hữu ích để thực hiện tác vụ sau khi submit form thành công. Ví dụ, bạn có thể dùng callback onSuccess để reset input về trạng thái ban đầu.
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().
Bạn có thể dùng thuộc tính 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.
Nếu form đang tải file lên, sự kiện tiến trình hiện tại có sẵn thông qua thuộc tính progress, giúp bạn dễ dàng hiển thị tiến độ tải lên.
Nếu có lỗi validation của form, chúng có sẵn thông qua thuộc tính errors. 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()'}.
Để tìm hiểu kỹ hơn về validation và lỗi của form, hãy xem tài liệu validation. Để xác định form có lỗi hay không, bạn có thể dùng thuộc tính hasErrors. Để xóa lỗi form, dùng phương thức clearErrors().
Nếu sử dụng thư viện validation input phía client hoặc tự validation phía client, bạn có thể tự đặt lỗi cho form bằng phương thức setErrors().
Khác với một lần submit form thực tế, props của trang không thay đổi khi bạn tự đặt lỗi trên một instance form. Khi form được submit thành công, thuộc tính 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. Để reset các giá trị của form về giá trị mặc định, bạn có thể dùng phương thức reset().
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ức defaults() để 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.
Để xác định form có thay đổi nào hay không, bạn có thể dùng thuộc tính isDirty.
Để hủy một lần submit form, dùng phương thức cancel().
Để yêu cầu Inertia lưu dữ liệu và lỗi của form vào history state, bạn có thể truyền một form key duy nhất làm đối số đầu tiên khi khởi tạo form.

Tải file lên

Khi thực hiện request hoặc submit form có chứa file, Inertia sẽ tự động chuyển dữ liệu request thành object FormData. Để tìm hiểu kỹ hơn về tải file, 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 hoàn toàn có thể thực hiện request XHR hoặc fetch thuần bằng thư viện mình lựa chọn.

Tài liệu chính thức

Bài dịch này được đối chiếu từ tài liệu Inertia.js v1 chính thức. Nếu có khác biệt do phiên bản hoặc cập nhật mới, hãy ưu tiên tài liệu chính thức làm nguồn tham chiếu.