From a038505c653a1d0cb1e929257d3479cee83dcceb Mon Sep 17 00:00:00 2001 From: btea <2356281422@qq.com> Date: Mon, 14 Oct 2024 10:14:32 +0800 Subject: [PATCH] chore: improve `renderComponentRoot` warn message (#10914) --- .../rendererAttrsFallthrough.spec.ts | 21 +++++++++++++++++++ .../runtime-core/src/componentRenderUtils.ts | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts b/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts index 9c985379c1e..45d00579fee 100644 --- a/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts +++ b/packages/runtime-core/__tests__/rendererAttrsFallthrough.spec.ts @@ -6,6 +6,7 @@ import { Fragment, type FunctionalComponent, + Teleport, createBlock, createCommentVNode, createElementBlock, @@ -391,6 +392,26 @@ describe('attribute fallthrough', () => { expect(`Extraneous non-emits event listeners`).toHaveBeenWarned() }) + it('should warn when fallthrough fails on teleport root node', () => { + const Parent = { + render() { + return h(Child, { class: 'parent' }) + }, + } + const root = document.createElement('div') + + const Child = defineComponent({ + render() { + return h(Teleport, { to: root }, h('div')) + }, + }) + + document.body.appendChild(root) + render(h(Parent), root) + + expect(`Extraneous non-props attributes (class)`).toHaveBeenWarned() + }) + it('should dedupe same listeners when $attrs is used during render', () => { const click = vi.fn() const count = ref(0) diff --git a/packages/runtime-core/src/componentRenderUtils.ts b/packages/runtime-core/src/componentRenderUtils.ts index a15d18d56bf..a1afae6201a 100644 --- a/packages/runtime-core/src/componentRenderUtils.ts +++ b/packages/runtime-core/src/componentRenderUtils.ts @@ -190,7 +190,7 @@ export function renderComponentRoot( `Extraneous non-props attributes (` + `${extraAttrs.join(', ')}) ` + `were passed to component but could not be automatically inherited ` + - `because component renders fragment or text root nodes.`, + `because component renders fragment or text or teleport root nodes.`, ) } if (eventAttrs.length) {