mirror of https://github.com/vuejs/core.git
fix(runtime-core): allow symbol values for slot prop key (#12069)
close #12068
This commit is contained in:
parent
e16e9a7341
commit
d9d4d4e158
|
@ -32,6 +32,12 @@ describe('renderSlot', () => {
|
||||||
expect(vnode.key).toBe('foo')
|
expect(vnode.key).toBe('foo')
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should allow symbol values for slot prop key', () => {
|
||||||
|
const key = Symbol()
|
||||||
|
const vnode = renderSlot({ default: () => [h('div')] }, 'default', { key })
|
||||||
|
expect(vnode.key).toBe('_default')
|
||||||
|
})
|
||||||
|
|
||||||
it('should render slot fallback', () => {
|
it('should render slot fallback', () => {
|
||||||
const vnode = renderSlot({}, 'default', { key: 'foo' }, () => ['fallback'])
|
const vnode = renderSlot({}, 'default', { key: 'foo' }, () => ['fallback'])
|
||||||
expect(vnode.children).toEqual(['fallback'])
|
expect(vnode.children).toEqual(['fallback'])
|
||||||
|
|
|
@ -14,7 +14,7 @@ import {
|
||||||
isVNode,
|
isVNode,
|
||||||
openBlock,
|
openBlock,
|
||||||
} from '../vnode'
|
} from '../vnode'
|
||||||
import { PatchFlags, SlotFlags } from '@vue/shared'
|
import { PatchFlags, SlotFlags, isSymbol } from '@vue/shared'
|
||||||
import { warn } from '../warning'
|
import { warn } from '../warning'
|
||||||
import { isAsyncWrapper } from '../apiAsyncComponent'
|
import { isAsyncWrapper } from '../apiAsyncComponent'
|
||||||
|
|
||||||
|
@ -72,15 +72,16 @@ export function renderSlot(
|
||||||
}
|
}
|
||||||
openBlock()
|
openBlock()
|
||||||
const validSlotContent = slot && ensureValidVNode(slot(props))
|
const validSlotContent = slot && ensureValidVNode(slot(props))
|
||||||
|
const slotKey =
|
||||||
|
props.key ||
|
||||||
|
// slot content array of a dynamic conditional slot may have a branch
|
||||||
|
// key attached in the `createSlots` helper, respect that
|
||||||
|
(validSlotContent && (validSlotContent as any).key)
|
||||||
const rendered = createBlock(
|
const rendered = createBlock(
|
||||||
Fragment,
|
Fragment,
|
||||||
{
|
{
|
||||||
key:
|
key:
|
||||||
(props.key ||
|
(slotKey && !isSymbol(slotKey) ? slotKey : `_${name}`) +
|
||||||
// slot content array of a dynamic conditional slot may have a branch
|
|
||||||
// key attached in the `createSlots` helper, respect that
|
|
||||||
(validSlotContent && (validSlotContent as any).key) ||
|
|
||||||
`_${name}`) +
|
|
||||||
// #7256 force differentiate fallback content from actual content
|
// #7256 force differentiate fallback content from actual content
|
||||||
(!validSlotContent && fallback ? '_fb' : ''),
|
(!validSlotContent && fallback ? '_fb' : ''),
|
||||||
},
|
},
|
||||||
|
|
Loading…
Reference in New Issue