Skip to content

Commit dec1099

Browse files
committed
fix: add compatibility for supportNumberKey
1 parent ca6bc55 commit dec1099

File tree

3 files changed

+11
-11
lines changed

3 files changed

+11
-11
lines changed

packages/components/form/FormItem.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -464,6 +464,7 @@ const FormItem = forwardRef<FormItemInstance, FormItemProps>((originalProps, ref
464464
fullPath,
465465
value: formValue,
466466
isUpdated: isUpdatedRef.current,
467+
isFormList: false,
467468
getValue: () => valueRef.current,
468469
setValue: (newVal: any) => updateFormValue(newVal, true, true),
469470
setField,

packages/components/form/hooks/useInstance.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { get, isEmpty, isFunction, merge, set } from 'lodash-es';
1+
import { cloneDeep, get, isEmpty, isFunction, merge, set } from 'lodash-es';
22
import log from '@tdesign/common-js/log/index';
33
import useConfig from '../../hooks/useConfig';
44
import { calcFieldValue, findFormItem, findFormItemDeep, objectToArray, travelMapFromObject } from '../utils';
@@ -123,8 +123,9 @@ export default function useInstance(
123123

124124
const processField = (name: string, formItemRef: any) => {
125125
if (!formItemRef?.current) return;
126-
const value = formItemRef.current.getValue?.();
127-
const fieldValue = calcFieldValue(name, value);
126+
const { getValue } = formItemRef.current;
127+
const value = getValue?.();
128+
const fieldValue = calcFieldValue(name, value, !props.supportNumberKey);
128129
merge(fieldsValue, fieldValue);
129130
};
130131

@@ -146,7 +147,7 @@ export default function useInstance(
146147
processField(name, formItemRef);
147148
}
148149
}
149-
return fieldsValue;
150+
return cloneDeep(fieldsValue);
150151
}
151152

152153
// 对外方法,设置对应 formItem 的值

packages/components/form/utils/index.ts

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -77,20 +77,18 @@ export function objectToArray(obj: Record<string | number, any>) {
7777
return result;
7878
}
7979

80-
export function calcFieldValue(name: NamePath, value: any) {
81-
const processedValue = Array.isArray(value) ? value.slice() : value;
80+
export function calcFieldValue(name: NamePath, value: any, numericKeyAsIndex = true) {
81+
const processedValue = Array.isArray(value) ? value : value;
8282
if (!Array.isArray(name)) {
8383
return { [name]: processedValue };
8484
}
85-
8685
let result: any = processedValue;
8786
for (let i = name.length - 1; i >= 0; i--) {
8887
const key = name[i];
89-
const isIndex = typeof key === 'number';
90-
91-
if (isIndex) {
88+
const isNumberKey = typeof key === 'number' && numericKeyAsIndex;
89+
if (isNumberKey) {
9290
const arr: any[] = [];
93-
arr[key] = result; // 构建稀疏数组
91+
arr[key] = result; // 稀疏数组
9492
result = arr;
9593
} else {
9694
result = { [key]: result };

0 commit comments

Comments
 (0)