semi-design icon indicating copy to clipboard operation
semi-design copied to clipboard

Modal.method() keepDOM still work

Open Rabbitzzc opened this issue 2 years ago • 5 comments

问题

当设置 keepdom: true, 然后调用 Modal.method 会重复创建 dom 的 image

解决方案

https://github.com/DouyinFE/semi-design/blob/main/packages/semi-ui/modal/confirm.tsx#L54 看了一下代码,加上 keepDOM={false} 应该就可以吧

function render(renderProps: ConfirmProps) {
    ReactDOM.render(<ConfirmModal {...renderProps} keepDOM={false} motion={mergedMotion} />, div);
}

Rabbitzzc avatar Apr 13 '22 10:04 Rabbitzzc

keepDOM 为 true,截图有问题

Rabbitzzc avatar Apr 13 '22 10:04 Rabbitzzc

看起来是对这个API作用理解有误。 keepDOM是声明式调用时,当你change modal visible true/false 的时候,始终保持容器不销毁。

而如果你用 modal.info、create这种命令式调用时,是一定会新建的。这个API本身就不应该在命令式调用里使用。 image

pointhalo avatar Apr 14 '22 03:04 pointhalo

命令式调用相当于,你call一次,就一定新建一个新的modal。如果你是要动态更新命令式调用的modal的内容,那么你可以用update。

pointhalo avatar Apr 14 '22 03:04 pointhalo

如果你是要动态更新命令式调用的 modal 的内容,那么你除了update 也可以在 modal 的 children 中传自定义组件,去更新这个组件的内容。

DaiQiangReal avatar Apr 14 '22 08:04 DaiQiangReal

命令式调用相当于,你call一次,就一定新建一个新的modal。如果你是要动态更新命令式调用的modal的内容,那么你可以用update。

不会,如果我设置了 keepDOM: false 是可行的。可以在官网看一下。我想表达的就是 keepDOM 不应该在命令调用中生效,而实际是生效的。 主要是想提到这一点

Rabbitzzc avatar Apr 15 '22 03:04 Rabbitzzc

v2.30 已修复

YyumeiZhang avatar Jul 03 '23 06:07 YyumeiZhang