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>')
|
||||
})
|
||||
|
||||
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', () => {
|
||||
let root: TestElement
|
||||
let elm: TestElement
|
||||
|
|
|
@ -793,7 +793,7 @@ export function normalizeVNode(child: VNodeChild): VNode {
|
|||
// #3666, avoid reference pollution when reusing vnode
|
||||
child.slice(),
|
||||
)
|
||||
} else if (typeof child === 'object') {
|
||||
} else if (isVNode(child)) {
|
||||
// already vnode, this should be the most common since compiled templates
|
||||
// always produce all-vnode children arrays
|
||||
return cloneIfMounted(child)
|
||||
|
|
Loading…
Reference in New Issue