diff --git a/components/_util/vnode.ts b/components/_util/vnode.ts index 1f8265c2d9..e5ab010a42 100644 --- a/components/_util/vnode.ts +++ b/components/_util/vnode.ts @@ -1,6 +1,6 @@ import { filterEmpty } from './props-util'; import type { VNode, VNodeProps } from 'vue'; -import { cloneVNode, isVNode } from 'vue'; +import { cloneVNode, isVNode, render as VueRender } from 'vue'; import warning from './warning'; import type { RefObject } from './createRef'; type NodeProps = Record & @@ -51,3 +51,7 @@ export function deepCloneElement( return cloned; } } + +export function triggerVNodeUpdate(vm: VNode, attrs: Record, dom: any) { + VueRender(cloneVNode(vm, { ...attrs }), dom); +} diff --git a/components/modal/confirm.tsx b/components/modal/confirm.tsx index 88959f73f7..80bd620823 100644 --- a/components/modal/confirm.tsx +++ b/components/modal/confirm.tsx @@ -3,6 +3,7 @@ import ConfirmDialog from './ConfirmDialog'; import type { ModalFuncProps } from './Modal'; import ConfigProvider, { globalConfigForApi } from '../config-provider'; import omit from '../_util/omit'; +import { triggerVNodeUpdate } from '../_util/vnode'; import { getConfirmLocale } from './locale'; import destroyFns from './destroyFns'; @@ -70,8 +71,7 @@ const confirm = (config: ModalFuncProps) => { }; } if (confirmDialogInstance) { - Object.assign(confirmDialogInstance.component.props, currentConfig); - confirmDialogInstance.component.update(); + triggerVNodeUpdate(confirmDialogInstance, currentConfig, container); } }