alibaba / x-render

🚴‍♀️ 阿里 - 很易用的中后台「表单 / 表格 / 图表」解决方案
https://xrender.fun
7.06k stars 1k forks source link

动态循环渲染FormRender,用同一个form实例,后面的render会覆盖前面的form实例 #1344

Closed Echonessy closed 1 year ago

Echonessy commented 1 year ago
const loopTabItems = (tree: TreeProps[]) => {
    return tree
      .filter((v: TreeProps) => v.active)
      .map((v: TreeProps) => {
        const render = (path: string) => (
          <FormRender
            schema={...}
            form={form} //不能共用一个form实例,实例会被覆盖,底层有问题
            ....
          />
        );
        return {
          label: v.label,
          key: v.value,
          children: (
            <>
              {render(v.schema)}
              {v?.children?.length ? <Tabs items={loopTabItems(v.children)} /> : null}
            </>
          ),
        };
      });
  };

.... n维tab页面,含有多个form表单模块,通过递归进行渲染,无法共用同一个实例,会被覆盖

<Tabs type="card" items={loopTabItems(treeData)} />
lhbxs commented 1 year ago

这个就好比是列表页面,每个按钮都需要一个局部 loading的问题,你把 FormRender 包括 useForm 那块,抽成一个组件,就会创建多个组件实例了。

Echonessy commented 1 year ago

您好,我是徐扬,您的邮件我已收到。