react-admin SimpleForm设置表单验证后字段验证未触发的问题
React-admin SimpleForm 表单级与字段级验证共存问题
问题解答:
这是预期行为吗?
是的,当你给SimpleForm指定表单级的validate函数时,react-admin 默认不会自动执行字段级的validate规则,这属于框架的预期设计——表单级验证会接管整体验证逻辑,字段级验证不会被自动触发。如何同时启用两种验证?
你需要在表单级的验证函数中手动调用字段级的验证逻辑,把字段验证的错误合并到表单错误对象里。示例代码修改如下:
const validateLetterTypeForm = (values: Partial<ILetterType>) => { const errors: Partial<ILetterType> = {}; // 手动调用字段级验证并收集错误 const businessAreaError = requiredField(values.businessArea); if (businessAreaError) { errors.businessArea = businessAreaError; } const letterTypeDescError = requiredField(values.letterTypeDesc); if (letterTypeDescError) { errors.letterTypeDesc = letterTypeDescError; } // 这里添加你的表单级额外验证逻辑 // 比如:if (!values.businessArea?.includes(values.letterTypeDesc)) { errors.form = '业务领域与文书类型描述存在冲突'; } return errors; }; const LetterTypeForm2 = () => { return ( <SimpleForm noValidate validate={validateLetterTypeForm}> <TextInput source="businessArea" required /> <TextInput source="letterTypeDesc" required /> </SimpleForm> ); };
说明:这里可以把字段上的validate={requiredField}去掉,因为已经在表单级验证里手动调用了;如果保留,字段单独触发验证时(比如输入框失焦)仍会生效,但统一在表单级处理逻辑会更清晰。
另外,如果你使用 Yup 等 schema 验证库,也可以直接在表单级验证中定义包含字段规则的完整 schema,既能处理单字段验证,也能轻松添加跨字段的表单级验证,实现更简洁的逻辑合并。
内容的提问来源于stack exchange,提问作者chrisl08
相关产品推荐
相关产品推荐

