fix(sfc): inherit parent scopeId on child rooot (#756)
This commit is contained in:
@@ -17,6 +17,27 @@ describe('scopeId runtime support', () => {
|
||||
expect(serializeInner(root)).toBe(`<div parent><div parent></div></div>`)
|
||||
})
|
||||
|
||||
test('should attach scopeId to components in parent component', () => {
|
||||
const Child = {
|
||||
__scopeId: 'child',
|
||||
render: withChildId(() => {
|
||||
return h('div')
|
||||
})
|
||||
}
|
||||
const App = {
|
||||
__scopeId: 'parent',
|
||||
render: withParentId(() => {
|
||||
return h('div', [h(Child)])
|
||||
})
|
||||
}
|
||||
|
||||
const root = nodeOps.createElement('div')
|
||||
render(h(App), root)
|
||||
expect(serializeInner(root)).toBe(
|
||||
`<div parent><div parent child></div></div>`
|
||||
)
|
||||
})
|
||||
|
||||
test('should work on slots', () => {
|
||||
const Child = {
|
||||
__scopeId: 'child',
|
||||
@@ -41,7 +62,7 @@ describe('scopeId runtime support', () => {
|
||||
// - scopeId from parent
|
||||
// - slotted scopeId (with `-s` postfix) from child (the tree owner)
|
||||
expect(serializeInner(root)).toBe(
|
||||
`<div child><div parent child-s></div></div>`
|
||||
`<div parent child><div parent child-s></div></div>`
|
||||
)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -39,6 +39,7 @@ export function renderComponentRoot(
|
||||
): VNode {
|
||||
const {
|
||||
type: Component,
|
||||
parent,
|
||||
vnode,
|
||||
proxy,
|
||||
withProxy,
|
||||
@@ -102,6 +103,11 @@ export function renderComponentRoot(
|
||||
if (vnodeHooks !== EMPTY_OBJ) {
|
||||
result = cloneVNode(result, vnodeHooks)
|
||||
}
|
||||
// inherit scopeId
|
||||
const parentScopeId = parent && parent.type.__scopeId
|
||||
if (parentScopeId) {
|
||||
result = cloneVNode(result, { [parentScopeId]: '' })
|
||||
}
|
||||
// inherit directives
|
||||
if (vnode.dirs != null) {
|
||||
if (__DEV__ && !isElementRoot(result)) {
|
||||
@@ -127,6 +133,7 @@ export function renderComponentRoot(
|
||||
result = createVNode(Comment)
|
||||
}
|
||||
currentRenderingInstance = null
|
||||
|
||||
return result
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user