diff --git a/packages/components/form/FormItem.tsx b/packages/components/form/FormItem.tsx index c6485514e1..dd79b75603 100644 --- a/packages/components/form/FormItem.tsx +++ b/packages/components/form/FormItem.tsx @@ -13,7 +13,7 @@ import { useLocaleReceiver } from '../locale/LocalReceiver'; import { NATIVE_INPUT_COMP, TD_CTRL_PROP_MAP, ValidateStatus } from './const'; import { formItemDefaultProps } from './defaultProps'; import { useFormContext, useFormListContext } from './FormContext'; -import { parseMessage, validate as validateModal } from './formModel'; +import { parseMessage, validate as validateModel } from './formModel'; import { HOOK_MARK } from './hooks/useForm'; import useFormItemInitialData from './hooks/useFormItemInitialData'; import useFormItemStyle from './hooks/useFormItemStyle'; @@ -238,10 +238,13 @@ const FormItem = forwardRef((originalProps, ref return result; } result.allowSetValue = true; - result.resultList = await validateModal(formValue, result.rules); + result.resultList = await validateModel(formValue, result.rules); result.errorList = result.resultList - .filter((item) => item.result !== true) + .filter((item) => item?.result !== true) .map((item) => { + if (!item || typeof item !== 'object') { + return item; + } Object.keys(item).forEach((key) => { if (!item.message && errorMessages[key]) { // eslint-disable-next-line @@ -255,9 +258,8 @@ const FormItem = forwardRef((originalProps, ref }); // 仅有自定义校验方法才会存在 successList result.successList = result.resultList.filter( - (item) => item.result === true && item.message && item.type === 'success', + (item) => item && item.result === true && item.message && item.type === 'success', ); - return result; } diff --git a/packages/components/form/hooks/useInstance.tsx b/packages/components/form/hooks/useInstance.tsx index ccde749a71..612285730c 100644 --- a/packages/components/form/hooks/useInstance.tsx +++ b/packages/components/form/hooks/useInstance.tsx @@ -26,8 +26,8 @@ function formatValidateResult(validateResultList) { Object.keys(result).forEach((key) => { if (result[key] === true) { delete result[key]; - } else { - result[key] = result[key].filter((fr: AllValidateResult) => fr.result === false); + } else if (Array.isArray(result[key])) { + result[key] = result[key].filter((fr: AllValidateResult) => fr?.result === false); } // 整理嵌套数据