返回

多姿多彩的联合校验,驰骋表单新世界

前端

自定义 Ant Design 表单校验规则和联合校验

在前端开发中,表单校验是确保用户输入数据的完整性和有效性的关键。Ant Design 提供了丰富的内置校验规则,但有时候我们需要定义自己的校验规则来满足特殊需求。此外,联合校验允许我们根据其他表单项的值对特定表单项进行条件校验。

自定义校验规则

自定义校验规则遵循以下语法:

validator(rule, value, callback) {
  // 校验逻辑
  if (条件满足) {
    callback(); // 通过校验
  } else {
    callback(错误信息); // 校验失败
  }
}

其中,rule 是校验规则配置对象,value 是待校验的值,callback 是校验结果的回调函数。

联合校验

联合校验允许我们基于其他表单项的值对特定表单项进行条件校验。通过 dependencies 属性,我们可以指定需要联合校验的表单项名称。当这些表单项的值发生变化时,Ant Design 会自动触发联合校验。

实际案例

以下是一个使用自定义校验规则和联合校验的实际案例:

需求:

  • 用户可以选择 "是" 或 "否" 回答 "是否同意" 问题。
  • 如果用户选择 "是",则需要填写 "详细说明" 字段。
  • 如果用户选择 "否",则不需要填写 "详细说明" 字段。

实现:

import { Form, Radio, Input } from 'antd';

const customRule = (rule, value, callback) => {
  if (value === '是') {
    callback();
  } else {
    callback('请填写详细说明');
  }
};

const Demo = () => {
  const [form] = Form.useForm();

  return (
    <Form form={form}>
      <Form.Item
        name="isAgree"
        label="是否同意"
        rules={[
          {
            required: true,
            message: '请选择是否同意',
          },
        ]}
      >
        <Radio.Group>
          <Radio value="是"></Radio>
          <Radio value="否"></Radio>
        </Radio.Group>
      </Form.Item>

      <Form.Item
        name="detail"
        label="详细说明"
        dependencies={['isAgree']}
        rules={[
          {
            required: true,
            message: '请填写详细说明',
          },
          {
            validator: customRule,
          },
        ]}
      >
        <Input />
      </Form.Item>

      <Button type="primary" htmlType="submit">
        提交
      </Button>
    </Form>
  );
};

结论

通过自定义校验规则和联合校验,我们可以在 Ant Design 中构建灵活而动态的表单。掌握这些技巧将使我们能够轻松处理复杂的需求,为用户提供无缝的表单体验。

常见问题解答

  1. 如何添加多个自定义校验规则?
    将它们作为数组传递给 rules 属性。

  2. 可以在联合校验中使用任意数量的表单项吗?
    是的,没有限制。

  3. 如果联合校验失败,如何显示错误信息?
    在联合校验的 Form.Item 中指定 help 属性,其中包含错误信息。

  4. 联合校验和依赖性注入有什么区别?
    联合校验基于表单项的值,而依赖性注入基于整个组件的属性。

  5. 自定义校验规则的语法是否强制的?
    是的,为了确保与 Ant Design 校验系统兼容。