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

React Admin 如何禁用表单 onChange 触发的校验,仅在blur或提交时生效?

解决方案

react-admin 的 TabbedForm 底层基于 react-hook-form 实现,你当前遇到的表单级校验在每次输入时触发的问题,是因为默认表单级校验的触发时机为 onChange,你配置的 validateOnBlur 仅作用于字段级校验,对表单级的validate属性不生效,需要通过透传react-hook-form的配置修改触发时机:

  • 给 TabbedForm 新增 formProps 属性,传入 { mode: 'onBlur' } 配置,即可让表单级校验仅在失焦、提交时触发
  • 如果你的校验函数逻辑较重,建议用 useCallback 包裹校验函数,避免重复生成新函数触发不必要的重渲染
  • 如果需要仅在提交时触发校验,将mode值改为'onSubmit'即可

修改后代码示例如下:

import { useCallback } from 'react';

export const ThemeCreate: FC = (props: any) => {
  // 用useCallback包裹校验函数减少重渲染
  const validateForm = useCallback(() => {
    console.log('validate me!');
    // 此处替换为你的原有校验逻辑
  }, []);

  return (
    <Create {...props} title="ui.themes.create" mutationMode="pessimistic">
      <TabbedForm
        toolbar={<GenericCreateToolbar />}
        validateOnBlur
        warnWhenUnsavedChanges
        validate={validateForm}
        {/* 新增formProps配置校验触发时机 */}
        formProps={{ mode: 'onBlur' }}
      >
        <MainFormTab />
        <TranslationsFormTab />
      </TabbedForm>
    </Create>
  );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:36:00