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

RJSF搭配TypeScript时如何在onSubmit处理函数中访问formData和event

解决方案

确认你使用的是react-jsonschema-form(以下简称rjsf)v5及以上版本,按以下步骤实现即可:

  • 第一步:定义表单数据对应的TS类型,你可以根据自己的schema结构自定义字段
  • 第二步:给onSubmit回调添加类型注解,自动推导event参数的TS类型
  • 第三步:直接调用e.preventDefault()方法即可

完整代码示例

import React from 'react';
import ReactDOM from 'react-dom/client';
import { Form, type OnSubmitHandler } from '@rjsf/core';
// 如果你用的是rjsf v4及以下版本,先执行npm i @types/react-jsonschema-form -D安装类型包,再从@types/react-jsonschema-form导入对应类型

// 1. 定义你的表单数据类型,按实际schema调整字段
interface IMyFormData {
  username: string;
  email: string;
  age: number;
}

// 2. 给onSubmit添加类型注解,第二个参数e会自动获得 React.FormEvent<HTMLFormElement> 类型
const onSubmit: OnSubmitHandler<IMyFormData> = ({ formData }, e) => {
  // 可选链是为了兼容少数无event的触发场景,避免运行时报错
  e?.preventDefault();
  console.log('提交的表单数据:', formData);
}

const schema = {
  // 你的schema定义,这里省略示例
  type: 'object',
  properties: {
    username: { type: 'string', title: '用户名' },
    email: { type: 'string', title: '邮箱', format: 'email' },
    age: { type: 'number', title: '年龄' }
  },
  required: ['username', 'email']
}

ReactDOM.createRoot(document.getElementById('app')!).render(
  <Form<IMyFormData>
    schema={schema}
    onSubmit={onSubmit}
  />
);

简化写法(无需导入rjsf专属类型)

如果你不想额外导入rjsf的OnSubmitHandler类型,也可以手动给参数标注类型:

import type { FormEvent } from 'react';

interface IMyFormData {
  // 你的表单字段
}

const onSubmit = ({ formData }: { formData: IMyFormData }, e?: FormEvent<HTMLFormElement>) => {
  e?.preventDefault();
  // 自定义提交逻辑
}

注意点

rjsf默认已经内置了阻止表单默认提交的行为,如果你没有自定义的提交跳转拦截需求,不需要额外手动调用preventDefault方法。

内容的提问来源于stack exchange,提问作者L. Wolf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 05:24:04