在 Ant Design 3 中,表单字段的校验触发时机可以通过 validateTrigger
属性来灵活控制。validateTrigger
决定了字段校验的触发时机,默认情况下,校验会在 onChange
和 onBlur
时触发。
你可以在 Form.create()
中通过 validateMessages
和 onFieldsChange
等配置项来全局设置校验触发时机。
import { Form, Input } from 'antd';
const CustomForm = Form.create({
onFieldsChange(props, changedFields) {
// 在这里可以处理字段变化
},
mapPropsToFields(props) {
// 在这里可以将 props 映射到字段
},
validateMessages: {
// 自定义校验消息
},
})((props) => {
const { getFieldDecorator } = props.form;
return (
<Form>
<Form.Item label="Username">
{getFieldDecorator('username', {
rules: [{ required: true, message: 'Please input your username!' }],
validateTrigger: 'onBlur', // 只在 onBlur 时触发校验
})(<Input />)}
</Form.Item>
</Form>
);
});
export default CustomForm;
你也可以在每个字段的 getFieldDecorator
中单独设置 validateTrigger
,来控制该字段的校验触发时机。
import { Form, Input } from 'antd';
const CustomForm = (props) => {
const { getFieldDecorator } = props.form;
return (
<Form>
<Form.Item label="Username">
{getFieldDecorator('username', {
rules: [{ required: true, message: 'Please input your username!' }],
validateTrigger: 'onBlur', // 只在 onBlur 时触发校验
})(<Input />)}
</Form.Item>
<Form.Item label="Email">
{getFieldDecorator('email', {
rules: [{ required: true, message: 'Please input your email!' }],
validateTrigger: ['onChange', 'onBlur'], // 在 onChange 和 onBlur 时都触发校验
})(<Input />)}
</Form.Item>
</Form>
);
};
export default Form.create()(CustomForm);
在某些情况下,你可能需要根据某些条件动态控制校验触发时机。你可以通过 setFieldsValue
和 validateFields
方法来实现。
import { Form, Input, Button } from 'antd';
const CustomForm = (props) => {
const { getFieldDecorator, setFieldsValue, validateFields } = props.form;
const handleChange = (e) => {
const value = e.target.value;
setFieldsValue({ username: value });
// 根据条件动态触发校验
if (value.length > 5) {
validateFields(['username'], (errors, values) => {
if (!errors) {
console.log('Validation passed:', values);
}
});
}
};
return (
<Form>
<Form.Item label="Username">
{getFieldDecorator('username', {
rules: [{ required: true, message: 'Please input your username!' }],
validateTrigger: 'onBlur', // 默认只在 onBlur 时触发校验
})(<Input onChange={handleChange} />)}
</Form.Item>
<Form.Item>
<Button type="primary" htmlType="submit">
Submit
</Button>
</Form.Item>
</Form>
);
};
export default Form.create()(CustomForm);
Form.create()
的配置项来全局设置校验触发时机。getFieldDecorator
中使用 validateTrigger
来单独设置字段的校验触发时机。setFieldsValue
和 validateFields
方法动态控制校验触发时机。通过这些方法,你可以灵活地控制 Ant Design 3 表单字段的校验触发时机,以满足不同的业务需求。