diff --git a/packages/form/src/components/Field/index.tsx b/packages/form/src/components/Field/index.tsx
index 18699c47c62d..6946daecd674 100644
--- a/packages/form/src/components/Field/index.tsx
+++ b/packages/form/src/components/Field/index.tsx
@@ -104,7 +104,7 @@ const BaseProFormField: React.FC<
}
onChange?.(...restParams);
},
- ...children.props,
+ ...((children?.props as any) || {}),
});
}
return <>{children}>;
diff --git a/packages/form/src/components/FieldSet/demos/components-other-readonly.tsx b/packages/form/src/components/FieldSet/demos/components-other-readonly.tsx
index a9f85c706f23..676a066b2613 100644
--- a/packages/form/src/components/FieldSet/demos/components-other-readonly.tsx
+++ b/packages/form/src/components/FieldSet/demos/components-other-readonly.tsx
@@ -103,6 +103,7 @@ const Demo = () => (
name: '蚂蚁金服有限公司',
radio: 'a',
list: ['1', '2', '3'],
+ list2: ['1', '2', '5', '5'],
select: 'china',
'radio-button': 'a',
dragger: [
@@ -339,6 +340,26 @@ const Demo = () => (
-
+
+ ({ startTime: value[0], endTime: value[1] })}
+ >
+ {(value) => {
+ return value?.map((e, index) => {
+ return (
+
+ );
+ });
+ }}
+
diff --git a/packages/form/src/components/FieldSet/index.tsx b/packages/form/src/components/FieldSet/index.tsx
index 80f88e9fd5b0..06ad3fa561f2 100644
--- a/packages/form/src/components/FieldSet/index.tsx
+++ b/packages/form/src/components/FieldSet/index.tsx
@@ -1,5 +1,5 @@
-import { useRefFunction } from '@ant-design/pro-utils';
-import type { FormItemProps, SpaceProps } from 'antd';
+import { runFunction, useRefFunction } from '@ant-design/pro-utils';
+import type { SpaceProps } from 'antd';
import { Input, Space } from 'antd';
import type { GroupProps } from 'antd/lib/input';
import toArray from 'rc-util/lib/Children/toArray';
@@ -18,7 +18,9 @@ export type ProFormFieldSetProps = {
fieldProps?: any;
convertValue?: ProFormItemProps['convertValue'];
transform?: ProFormItemProps['transform'];
- children?: React.ReactNode;
+ children?:
+ | ((value: T[], props: ProFormFieldSetProps) => React.ReactNode)
+ | React.ReactNode;
lightProps?: LightWrapperProps;
};
@@ -36,19 +38,20 @@ export function defaultGetValueFromEvent(valuePropName: string, ...args: any) {
return event;
}
-const FieldSet: React.FC = ({
- children,
- value = [],
- valuePropName,
- onChange,
- fieldProps,
- space,
- type = 'space',
- transform,
- convertValue,
- lightProps,
- ...rest
-}) => {
+const FieldSet: React.FC = (props) => {
+ const {
+ children,
+ value = [],
+ valuePropName,
+ onChange,
+ fieldProps,
+ space,
+ type = 'space',
+ transform,
+ convertValue,
+ lightProps,
+ ...rest
+ } = props;
/**
* 使用方法的引用防止闭包
*
@@ -67,7 +70,7 @@ const FieldSet: React.FC = ({
});
let itemIndex = -1;
- const list = toArray(children).map((item: any) => {
+ const list = toArray(runFunction(children, value, props)).map((item: any) => {
if (React.isValidElement(item)) {
itemIndex += 1;
const index = itemIndex;
@@ -124,25 +127,25 @@ const FieldSet: React.FC = ({
return {list};
};
-const BaseProFormFieldSet: React.FC =
- React.forwardRef(({ children, space, valuePropName, ...rest }, ref) => {
- useImperativeHandle(ref, () => ({}));
- return (
-
- );
- });
+const BaseProFormFieldSet: React.FC<
+ Omit & ProFormFieldSetProps
+> = React.forwardRef(({ children, space, valuePropName, ...rest }, ref) => {
+ useImperativeHandle(ref, () => ({}));
+ return (
+
+ );
+});
-const ProFormFieldSet = createField(
- BaseProFormFieldSet,
-) as typeof BaseProFormFieldSet;
+const ProFormFieldSet =
+ createField>(BaseProFormFieldSet);
-export default ProFormFieldSet;
+export default ProFormFieldSet as typeof BaseProFormFieldSet;
diff --git a/packages/form/src/typing.ts b/packages/form/src/typing.ts
index 9f6d016d36bb..d454d8c52998 100644
--- a/packages/form/src/typing.ts
+++ b/packages/form/src/typing.ts
@@ -160,7 +160,7 @@ export type ProFormFieldItemProps, K = any> = {
*/
footerRender?: LightFilterFooterRender;
- children?: React.ReactNode;
+ children?: any;
} & Omit &
Pick &
ExtendsProps;
diff --git a/tests/form/__snapshots__/demo.test.ts.snap b/tests/form/__snapshots__/demo.test.ts.snap
index b89069e935f1..4cac917b0082 100644
--- a/tests/form/__snapshots__/demo.test.ts.snap
+++ b/tests/form/__snapshots__/demo.test.ts.snap
@@ -5863,6 +5863,62 @@ exports[`form demos > 📸 renders ./packages/form/src/components/FieldSet/demos
+