表单提交策略
策略类型
useForm
在使用扩展 hooks 前,确保你已熟悉了 alova 的基本使用。
为表单提交而设计的 hook,通过此 hook 你可以很方便地实现表单草稿、多页面(多步骤)表单,除此以外还提供了表单重置等常用功能。
特性
- 表单草稿;
- 多页面(多步骤)表单;
- 表单提交自动重置数据;
- 手动重置表单数据;
使用
基本用法
展示表单 hook 的基本使用。
- vue
- react
- svelte
- solid
<template>
<input v-model="form.name" />
<select v-model="form.cls">
<option value="1">class 1</option>
<option value="2">class 2</option>
<option value="3">class 3</option>
</select>
<button
@click="handleSubmit"
:loading="submiting">
提交
</button>
</template>
<script setup>
import { formSubmit } from './api.js';
import { useForm } from 'alova/client';
const {
// 提交状态
loading: submiting,
// 响应式的表单数据,内容 由initialForm决定
form,
// 提交数据函数
send: submit,
// 提交成功回调绑定
onSuccess,
// 提交失败回调绑定
onError,
// 提交完成回调绑定
onComplete
} = useForm(
formData => {
// 可以在此转换表单数据并提交
return formSubmit(formData);
},
{
// 初始化表单数据
initialForm: {
name: '',
cls: '1'
}
}
);
// 提交表单数据
const handleSubmit = () => {
// 验证表单数据...
submit();
};
</script>
import { formSubmit } from './api.js';
import { useForm } from 'alova/client';
const App = () => {
const {
// 提交状态
loading: submiting,
// 响应式的表单数据,内容由initialForm决定
form,
// 提交数据函数
send: submit,
// 更新表单项
updateForm,
// 提交成功回调绑定
onSuccess,
// 提交失败回调绑定
onError,
// 提交完成回调绑定
onComplete
} = useForm(
formData => {
// 可以在此转换表单数据并提交
return formSubmit(formData);
},
{
// 初始 化表单数据
initialForm: {
name: '',
cls: '1'
}
}
);
// 提交表单数据
const handleSubmit = () => {
// 验证表单数据...
submit();
};
return (
<div>
<input
value={form.name}
onChange={({ target }) => updateForm({ name: target.value })}
/>
<select
value={form.cls}
onChange={({ target }) => updateForm({ cls: target.value })}>
<option value="1">class 1</option>
<option value="2">class 2</option>
<option value="3">class 3</option>
</select>
<button
onClick={handleSubmit}
loading={submiting}>
提交
</button>
</div>
);
};
<script>
import { formSubmit } from './api.js';
import { useForm } from 'alova/client';
const {
// 提交状态
loading: submiting,
// 响应式的表单数据,内容由initialForm决定
form,
// 提交数据函数
send: submit,
// 提交成功回调绑定
onSuccess,
// 提交失败回调绑定
onError,
// 提交完成回调绑定
onComplete
} = useForm(
formData => {
// 可以在此转换表单数据并提交
return formSubmit(formData);
},
{
// 初始化表单数据
initialForm: {
name: '',
cls: '1'
}
}
);
// 提交表单数据
const handleSubmit = () => {
// 验证表单数据...
submit();
};
</script>
<input bind:value="{$form.name}" />
<select bind:value="{$form.cls}">
<option value="1">class 1</option>
<option value="2">class 2</option>
<option value="3">class 3</option>
</select>
<button
on:click="{handleSubmit}"
loading="{$submiting}">
提交
</button>
import { formSubmit } from './api.js';
import { useForm } from 'alova/client';
const App = () => {
const {
// 提交状态
loading: submiting,
// 响应式的表单数据,内容由initialForm决定
form,
// 提交数据函数
send: submit,
// 更新表单项
updateForm,
// 提交成功回调绑定
onSuccess,
// 提交失败回调绑定
onError,
// 提交完成回调绑定
onComplete
} = useForm(
formData => {
// 可以在此转换表单数据并提交
return formSubmit(formData);
},
{
// 初始化表单数据
initialForm: {
name: '',
cls: '1'
}
}
);
// 提交表单数据
const handleSubmit = () => {
// 验证表单数据...
submit();
};
return (
<div>
<input
value={form().name}
onChange={({ target }) => updateForm({ name: target.value })}
/>
<select
value={form().cls}
onChange={({ target }) => updateForm({ cls: target.value })}>
<option value="1">class 1</option>
<option value="2">class 2</option>
<option value="3">class 3</option>
</select>
<button
onClick={handleSubmit}
loading={submiting()}>
提交
</button>
</div>
);
};
useForm默认不会请求,在调用send后才会发出请求,同时在useForm的回调函数将传入最新的 form 数据,如果需要在提交前转换数据,可在此进行转换,也可以在formSubmit函数中转换。
注意
initialForm是设置初始表单数据,initialData是设置初始响应数据,注意区分;updateForm是更新表单数据,update是更新响应数据,注意区分;
以上示例只展示了简单的表单提交功能,普通的表单提交没有差别,但useForm还实现了更多的实用功能,让我们继续往下看。