DouyinFE / semi-design

🚀A modern, comprehensive, flexible design system and React UI library. 🎨 Provide more than 3000+ Design Tokens, easy to build your design system. Make Semi Design to Any Design. 🧑🏻‍💻 Design to Code in one click
https://semi.design
Other
8.39k stars 709 forks source link

Modal.method() keepDOM still work #762

Closed Rabbitzzc closed 1 year ago

Rabbitzzc commented 2 years ago

问题

当设置 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 commented 2 years ago

keepDOM 为 true,截图有问题

pointhalo commented 2 years ago

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

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

pointhalo commented 2 years ago

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

DaiQiangReal commented 2 years ago

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

Rabbitzzc commented 2 years ago

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

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

YyumeiZhang commented 1 year ago

v2.30 已修复