You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用@rjsf/antd v5时表单必填字段验证失效问题求助

@rjsf/antd v5 表单验证失效及外部提交按钮问题解决

问题背景

使用@rjsf/antd v5和@rjsf/core v5实现表单必填字段(带*标记)验证时,遇到两个核心问题:

  • 原生antd <Form/>组件的验证功能正常,但切换为<RJSFForm/>(应用RJSF的antd主题)后,必填字段验证完全失效
  • 需要将提交按钮放在表单组件外部,已隐藏内部提交按钮,通过外部按钮触发提交动作

经开发者工具排查,问题根源是RJSF的antd主题未给必填字段添加required属性,目前已在GitHub提交工单#3743追踪该问题。

临时解决方案

在官方修复前,可以通过以下两种方式解决验证失效问题:

1. 自定义字段组件手动添加required属性

针对字符串、数字等基础字段,自定义对应的组件,渲染时强制传入required属性:

import { RJSFForm } from '@rjsf/antd';
import { Input, Select } from 'antd';

// 自定义输入框组件
const CustomInput = (props) => {
  const { required, ...restProps } = props;
  return <Input {...restProps} required={required} />;
};

// 自定义选择器组件
const CustomSelect = (props) => {
  const { required, ...restProps } = props;
  return <Select {...restProps} required={required} />;
};

// 表单schema示例
const formSchema = {
  type: 'object',
  properties: {
    username: {
      type: 'string',
      title: '用户名',
      minLength: 1
    },
    role: {
      type: 'string',
      title: '角色',
      enum: ['admin', 'user']
    }
  },
  required: ['username', 'role']
};

// 在RJSFForm中配置自定义组件
<RJSFForm
  schema={formSchema}
  widgets={{
    StringField: CustomInput,
    SelectField: CustomSelect
  }}
  submitButton={false}
/>

2. 外部按钮触发时手动执行表单验证

通过formRef获取RJSFForm的antd表单实例,手动调用validateFields方法完成验证,验证通过后再执行提交逻辑:

import { useRef } from 'react';
import { RJSFForm } from '@rjsf/antd';
import { Button } from 'antd';

const App = () => {
  const formRef = useRef(null);

  const handleExternalSubmit = async () => {
    try {
      // 手动触发字段验证
      await formRef.current.validateFields();
      // 验证通过,获取表单数据并提交
      const formData = formRef.current.getValues();
      // 这里替换为实际的提交逻辑
      console.log('提交成功,数据:', formData);
    } catch (error) {
      console.log('验证失败:', error);
    }
  };

  return (
    <div>
      <RJSFForm
        ref={formRef}
        schema={formSchema}
        submitButton={false}
      />
      <Button type="primary" onClick={handleExternalSubmit} style={{ marginTop: 16 }}>
        外部提交
      </Button>
    </div>
  );
};

问题追踪

该问题已在RJSF官方仓库提交工单#3743,后续可关注工单状态获取官方修复进展。

内容的提问来源于stack exchange,提问作者Georgios

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 20:22:37