mirror of https://github.com/vuejs/core.git
fix(runtime-core): avoid rendering plain object as VNode (#12038)
close #12035 close vitejs/vite-plugin-vue#353
This commit is contained in:
parent
faf55a15d7
commit
cb34b28a4a
|
@ -65,6 +65,15 @@ test('array children -> text children', () => {
|
||||||
expect(inner(root)).toBe('<div>hello</div>')
|
expect(inner(root)).toBe('<div>hello</div>')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('plain object child', () => {
|
||||||
|
const root = nodeOps.createElement('div')
|
||||||
|
const foo = { foo: '1' }
|
||||||
|
// @ts-expect-error
|
||||||
|
render(h('div', null, [foo]), root)
|
||||||
|
expect('Invalid VNode type').not.toHaveBeenWarned()
|
||||||
|
expect(inner(root)).toBe('<div>[object Object]</div>')
|
||||||
|
})
|
||||||
|
|
||||||
describe('renderer: keyed children', () => {
|
describe('renderer: keyed children', () => {
|
||||||
let root: TestElement
|
let root: TestElement
|
||||||
let elm: TestElement
|
let elm: TestElement
|
||||||
|
|
|
@ -793,7 +793,7 @@ export function normalizeVNode(child: VNodeChild): VNode {
|
||||||
// #3666, avoid reference pollution when reusing vnode
|
// #3666, avoid reference pollution when reusing vnode
|
||||||
child.slice(),
|
child.slice(),
|
||||||
)
|
)
|
||||||
} else if (typeof child === 'object') {
|
} else if (isVNode(child)) {
|
||||||
// already vnode, this should be the most common since compiled templates
|
// already vnode, this should be the most common since compiled templates
|
||||||
// always produce all-vnode children arrays
|
// always produce all-vnode children arrays
|
||||||
return cloneIfMounted(child)
|
return cloneIfMounted(child)
|
||||||
|
|
Loading…
Reference in New Issue