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
相关产品推荐
相关产品推荐

