From 6fa33e67ec42af140a86fbdb86939032c3a1f345 Mon Sep 17 00:00:00 2001 From: inottn Date: Thu, 18 Jan 2024 11:45:11 +0800 Subject: [PATCH] fix(runtime-core): should not warn out-of-render slot fn usage when mounting another app in setup (#10125) close #10124 --- .../__tests__/componentSlots.spec.ts | 29 +++++++++++++++++++ packages/runtime-core/src/componentSlots.ts | 6 +++- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/__tests__/componentSlots.spec.ts b/packages/runtime-core/__tests__/componentSlots.spec.ts index dde505b48e1..09b37932147 100644 --- a/packages/runtime-core/__tests__/componentSlots.spec.ts +++ b/packages/runtime-core/__tests__/componentSlots.spec.ts @@ -1,4 +1,5 @@ import { + createApp, getCurrentInstance, h, nextTick, @@ -240,4 +241,32 @@ describe('component: slots', () => { await nextTick() expect(spy).toHaveBeenCalledTimes(2) }) + + test('should not warn when mounting another app in setup', () => { + const Comp = { + setup(_: any, { slots }: any) { + return () => slots.default?.() + }, + } + + const mountComp = () => { + createApp({ + setup() { + return () => h(Comp, () => 'msg') + }, + }).mount(nodeOps.createElement('div')) + } + + const App = { + setup() { + mountComp() + return () => null + }, + } + + createApp(App).mount(nodeOps.createElement('div')) + expect( + 'Slot "default" invoked outside of the render function', + ).not.toHaveBeenWarned() + }) }) diff --git a/packages/runtime-core/src/componentSlots.ts b/packages/runtime-core/src/componentSlots.ts index 3214f8cb455..61e1ecc072c 100644 --- a/packages/runtime-core/src/componentSlots.ts +++ b/packages/runtime-core/src/componentSlots.ts @@ -97,7 +97,11 @@ const normalizeSlot = ( return rawSlot as Slot } const normalized = withCtx((...args: any[]) => { - if (__DEV__ && currentInstance) { + if ( + __DEV__ && + currentInstance && + (!ctx || ctx.root === currentInstance.root) + ) { warn( `Slot "${key}" invoked outside of the render function: ` + `this will not track dependencies used in the slot. ` +