当前位置: 首页 > 知识库问答 >
问题:

前端 - 使用antd Form,期望只校验数据正确性不校验必填怎么操作?

邢昊焜
2023-10-07

表单有两个提交按钮,一个是保存,一个是提交。保存时,只验证数据正确性,下次继续完善。提交就是验证数据正确性同时验证必填项。
该怎么实现呢?

共有2个答案

越俊驰
2023-10-07

要不用一个变量来控制一下:

import React, { useState } from "react";import { Input, Button, Space, Form } from "antd";import "antd/dist/antd.css";import "./styles.css";export default function App() {  const [form] = Form.useForm();  const [isSubmit, setIsSubmit] = useState(true);  const handleSubmit = (values) => {    setIsSubmit(true);    form.submit();    console.log(form.getFieldsValue());  };  const handleSave = async () => {    setIsSubmit(false);    form.validateFields();    console.log(form.getFieldsValue());  };  return (    <div className="App">      <Form form={form} layout="vertical">        <Form.Item          name="input1"          label="Input 1"          rules={[{ required: isSubmit }]}        >          <Input />        </Form.Item>        <Form.Item          name="input2"          label="Input 2"          rules={[{ required: isSubmit }]}        >          <Input />        </Form.Item>        <Space>          <Button onClick={handleSubmit} type="primary">            Submit          </Button>          <Button onClick={handleSave}>Save</Button>        </Space>      </Form>    </div>  );}

这里有个我自己写的完整的例子,希望能帮助到你。

常雅达
2023-10-07

看起来你需要根据不同的按钮动作来调整验证规则。Ant Design(antd)的Form组件为你提供了这样的功能。你可以为每个表单项定义不同的验证规则,并且根据需要使用这些规则。

当你使用Form.Itemrules属性定义验证规则时,你可以添加一个规则到rules数组中,该规则的validator函数会在表单项的值改变时被调用,如果验证通过则返回Promise.resolve(),否则返回一个有错误提示的Promise.reject()

以下是一个例子,展示了如何在校验数据正确性时忽略必填项:

import { Form, Button } from 'antd';const Demo = () => {  const [form] = Form.useForm();  const validateInput = (rule, value) => {    if (value && value.includes('input')) {  // 如果输入值包含 'input' 则视为正确      return Promise.resolve();    }    return Promise.reject('输入的值必须包含 "input"!');  // 如果输入值不包含 'input' 则校验失败  };  const save = () => {    form.validateFields((err, values) => {      if (err) {        console.log('验证失败,表单数据错误');      } else {        console.log('保存成功,表单数据:', values);      }    });  };  const submit = () => {    form.validateFields((err, values) => {      if (err) {        console.log('验证失败,表单数据错误');      } else {        console.log('提交成功,表单数据:', values);      }    });  };  return (    <Form form={form}>      <Form.Item name="inputField" rules={[{ validator: validateInput }]}>        <Input />      </Form.Item>      <Button type="primary" onClick={save}>保存</Button>      <Button onClick={submit}>提交</Button>    </Form>  );};export default Demo;

在这个例子中,"inputField" 是表单项的名称,它的 rules 属性包含一个验证规则,使用 validator 函数 validateInput 对输入值进行校验。如果输入值包含 "input",则校验通过;否则,校验失败并提示错误信息。

当你点击 "保存" 按钮时,会调用 save 方法,此方法会调用 form.validateFields 方法进行表单验证。此时,由于 validateInput 函数只校验输入值是否包含 "input",而不会校验必填项,因此即使必填项未填,也可以保存。

而当你点击 "提交" 按钮时,会调用 submit 方法,同样会调用 form.validateFields 方法进行表单验证。但与 "保存" 不同,"提交" 会执行所有的验证规则,包括必填项的校验,因此如果必填项未填,则无法提交。

 类似资料:
  • 我们可以给组件的 data 指定校验规则。如果传入的数据不符合规则,那么 san 会抛出异常。当组件给其他人使用时,这很有用。 指定校验规则,需要使用 DataTypes 进行声明: import san, {DataTypes} from 'san'; let MyComponent = san.defineComponent({ dataTypes: { name:

  • 本文向大家介绍springboot使用校验框架validation校验的示例,包括了springboot使用校验框架validation校验的示例的使用技巧和注意事项,需要的朋友参考一下 b/s系统中对http请求数据的校验多数在客户端进行,这也是出于简单及用户体验性上考虑,但是在一些安全性要求高的系统中服务端校验是不可缺少的。 Spring3支持JSR-303验证框架,JSR-303 是Java

  • 使用函数式组合的方式实现,可以配合 Form 组件实现表单校验功能。 Usage 只支持按需引入。 import validator from 'beeshell/dist/common/utils/validator' Examples Code 详细 Code const validate = validator.dispatch( validator.register('name',

  • 只要JSR-303实现(例如Hibernate验证器)在类路径上,就会自动启用Bean Validation 1.1支持的方法验证功能。 这允许bean方法在其参数和/或返回值上使用javax.validation约束进行注释。 具有这种带注释方法的目标类需要在类型级别使用@Validated注释进行注释,以便搜索内联约束注释的方法。 例如,以下服务触发第一个参数的验证,确保其大小在8到10之间:

  • 本文向大家介绍vue+VeeValidate 校验范围实例详解(部分校验,全部校验),包括了vue+VeeValidate 校验范围实例详解(部分校验,全部校验)的使用技巧和注意事项,需要的朋友参考一下 搜索很久,没有发现有关于vue+VeeValidate部分校验的。自己写一个。 主要是两个场景: 1. 校验范围内,所有的字段。 2. 校验全局所有字段。 主要方法: 1.validate(fie

  • 本小节会介绍 Django 中 Form 对象的相关属性与方法,并结合实战让大家能彻底掌握表单的用法。 1. 关于表单的两个基本实验 表单我们在前面介绍 HTML 基础的时候介绍过。下面是之前完成的一个简单的表单示例,模仿普通网站的登录表单: (django-manual) [root@server first_django_app]# cat templates/test_form1.html