Form
The Form component wires HTML forms to #[submit] handlers with progressive enhancement.
LIVE
#[submit] Form
Basic form
#[data]
struct GreetForm {
name: String,
}
#[submit]
async fn greet(form: GreetForm, _req: &FlowRequest)
-> Result<GreetResult, SubmitError>
{
if form.name.trim().is_empty() {
return Err(SubmitError::new("Fix errors")
.field("name", "Required"));
}
Ok(GreetResult { message: format!("Hello, {}!", form.name) })
}
view! {
<Form submit={greet}>
<input name="name" type="text" required />
<button type="submit">"Greet"</button>
</Form>
}Progressive enhancement
Form renders method="POST" and action="/_resuma/submit/:name". Without JavaScript, the browser submits normally. With the runtime loaded, submit is intercepted for SPA-style updates.
Client-side feedback
When the runtime intercepts submit, responses include ok, value, error, and field_errors. Use js! for optimistic UI updates after submit.
See also
Submit handler details on Actions (submits).