feat(runtime-core): support variadic children in h for simple JSX compat

ref: #1917
This commit is contained in:
Evan You 2020-08-21 21:54:33 -04:00
parent 6602d6dbff
commit 54d06ec495
2 changed files with 21 additions and 2 deletions

View File

@ -64,4 +64,20 @@ describe('renderer: h', () => {
})
)
})
// for simple JSX compat
// note this signature is not supported in types; it's purely for usage with
// compiled code.
test('support variadic children', () => {
// @ts-ignore
const vnode = h('div', null, h('span'), h('span'))
expect(vnode.children).toMatchObject([
{
type: 'span'
},
{
type: 'span'
}
])
})
})

View File

@ -129,7 +129,8 @@ export function h<P>(
// Actual implementation
export function h(type: any, propsOrChildren?: any, children?: any): VNode {
if (arguments.length === 2) {
const l = arguments.length
if (l === 2) {
if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {
// single vnode without props
if (isVNode(propsOrChildren)) {
@ -142,7 +143,9 @@ export function h(type: any, propsOrChildren?: any, children?: any): VNode {
return createVNode(type, null, propsOrChildren)
}
} else {
if (isVNode(children)) {
if (l > 3) {
children = Array.prototype.slice.call(arguments, 2)
} else if (l === 3 && isVNode(children)) {
children = [children]
}
return createVNode(type, propsOrChildren, children)