Skip to content

Commit

Permalink
fix(form): fix form getFieldsValue bug
Browse files Browse the repository at this point in the history
  • Loading branch information
HaixingOoO committed Oct 19, 2024
1 parent 4c70727 commit 6534e69
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 8 deletions.
7 changes: 6 additions & 1 deletion src/form/hooks/useInstance.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,12 @@ export default function useInstance(props: TdFormProps, formRef, formMapRef: Rea
if (nameList === true) {
// 嵌套数组子节点先添加导致外层数据覆盖因而需要倒序遍历
for (const [name, formItemRef] of [...formMapRef.current.entries()].reverse()) {
const fieldValue = calcFieldValue(name, formItemRef?.current.getValue?.());
let fieldValue = null;
if (formItemRef?.current.isFormList) {
fieldValue = calcFieldValue(name, formItemRef?.current.getValue?.());
} else {
fieldValue = calcFieldValue(name, formItemRef?.current.getValue?.(), false);
}
merge(fieldsValue, fieldValue);
}
} else {
Expand Down
22 changes: 15 additions & 7 deletions src/form/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,22 @@ export function getMapValue(name: NamePath, formMapRef: React.MutableRefObject<M
}

// 将数据整理成对象,数组 name 转化嵌套对象: ['user', 'name'] => { user: { name: '' } }
export function calcFieldValue(name: NamePath, value: any) {
export function calcFieldValue(name: NamePath, value: any, isFormList = true) {
if (Array.isArray(name)) {
const fieldValue = name.reduceRight((prev, curr) => {
const arr = [];
if (/^\d+$/.test(String(curr))) arr[curr] = prev;
return arr.length ? arr : { [curr]: prev };
}, value);
return { ...fieldValue };
if (isFormList) {
const fieldValue = name.reduceRight((prev, curr) => {
const arr = [];
if (/^\d+$/.test(String(curr))) arr[curr] = prev;
return arr.length ? arr : { [curr]: prev };
}, value);
return { ...fieldValue };
}
return name.reduceRight((prev, curr, currentIndex) => {
if (currentIndex === name.length - 1) {
return { [curr]: value };
}
return { [curr]: prev };
}, {});
}

return { [name]: value };
Expand Down

0 comments on commit 6534e69

Please sign in to comment.