feat(runtime-core): support variadic children in h
for simple JSX compat
ref: #1917
This commit is contained in:
parent
6602d6dbff
commit
54d06ec495
@ -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'
|
||||
}
|
||||
])
|
||||
})
|
||||
})
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user