From 7475ac8eeb89a63e93dad54a29f4d2174f08213f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=40=E9=95=BF=E4=B9=85=E5=90=8C=E5=AD=A6?= Date: Thu, 26 Feb 2026 15:26:39 +0800 Subject: [PATCH] fix(components): [select] Slot default invoked outside of the render (#23232) * fix(components): [select] Slot default invoked outside of the render * test: fix expect error --------- Co-authored-by: rzzf --- packages/components/select/__tests__/options.test.tsx | 4 ++-- packages/components/select/src/select.vue | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/packages/components/select/__tests__/options.test.tsx b/packages/components/select/__tests__/options.test.tsx index 6a4f2f05c6..bc92ebcd22 100644 --- a/packages/components/select/__tests__/options.test.tsx +++ b/packages/components/select/__tests__/options.test.tsx @@ -62,7 +62,7 @@ describe('options', () => { default: () => samples.map((_, i) => ), }) - expect(mockWarn).toHaveBeenCalled() + expect(mockWarn).not.toHaveBeenCalled() vi.resetAllMocks() await nextTick() }) @@ -85,7 +85,7 @@ describe('options', () => { )), }) - expect(spy).toHaveBeenCalled() + expect(spy).not.toHaveBeenCalled() vi.resetAllMocks() }) }) diff --git a/packages/components/select/src/select.vue b/packages/components/select/src/select.vue index 3922bf9c77..8bfa48b071 100644 --- a/packages/components/select/src/select.vue +++ b/packages/components/select/src/select.vue @@ -521,7 +521,12 @@ export default defineComponent({ }) } watch( - () => [slots.default?.(), modelValue.value], + () => [ + props.persistent || API.expanded.value || !slots.default + ? undefined + : slots.default?.(), + modelValue.value, + ], () => { // When persistent is false and the dropdown is closed, the menu is unmounted. // We should always re-hydrate option data from slots so labels stay in sync