From 75f97e7e0c3eac9217f1c140f425e13d542af01e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=A2=AB=E9=9B=A8=E6=B0=B4=E8=BF=87=E6=BB=A4=E7=9A=84?= =?UTF-8?q?=E7=A9=BA=E6=B0=94-Rain?= <958414905@qq.com> Date: Sat, 21 Oct 2023 11:31:38 +0800 Subject: [PATCH] fix: disappearing of sub-form data (#2888) --- .../form-item/hooks/useLazyLoadAssociationFieldOfForm.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts b/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts index 263348145..a607889ed 100644 --- a/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts +++ b/packages/core/client/src/schema-component/antd/form-item/hooks/useLazyLoadAssociationFieldOfForm.ts @@ -56,6 +56,15 @@ const useLazyLoadAssociationFieldOfForm = () => { variables .parseVariable(variableString, recordVariable) .then((value) => { + // fix https://nocobase.height.app/T-2288 + // 造成这个问题的原因有以下几点: + // 1. 编辑表单自身会请求数据,并在请求数据时,会在 appends 参数中加上所有的关系字段路径(包括子表单中的); + // 2. 而 `变量预加载中` 也会请求对应关系字段的数据,但是请求的数据是不包含子表单中的关系字段的; + // 3. 所以,当 `变量预加载` 的请求晚于编辑表单的请求时,就会造成这个问题; + // 更优的解决方案是:在 `变量预加载` 中也加上子表单中的关系字段路径,并删除编辑表单请求数据的逻辑(因为没必要了)。 + // 但是这样改动较大,可以等之后 e2e 测试较完备后再处理。 + if (field.value) return; + field.value = transformVariableValue(value, { targetCollectionField: collectionField }); }) .catch((err) => {