fix(runtime-core): mount children before setting element props

fix #1318, close #1320
This commit is contained in:
Evan You
2020-06-12 12:14:39 -04:00
parent aac9b03c11
commit 8084156f4d
2 changed files with 23 additions and 20 deletions

View File

@@ -672,6 +672,23 @@ function baseCreateRenderer(
isSVG,
props && props.is
)
// mount children first, since some props may rely on child content
// being already rendered, e.g. `<select value>`
if (shapeFlag & ShapeFlags.TEXT_CHILDREN) {
hostSetElementText(el, vnode.children as string)
} else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
mountChildren(
vnode.children as VNodeArrayChildren,
el,
null,
parentComponent,
parentSuspense,
isSVG && type !== 'foreignObject',
optimized || !!vnode.dynamicChildren
)
}
// props
if (props) {
for (const key in props) {
@@ -707,20 +724,6 @@ function baseCreateRenderer(
hostSetScopeId(el, treeOwnerId + '-s')
}
// children
if (shapeFlag & ShapeFlags.TEXT_CHILDREN) {
hostSetElementText(el, vnode.children as string)
} else if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
mountChildren(
vnode.children as VNodeArrayChildren,
el,
null,
parentComponent,
parentSuspense,
isSVG && type !== 'foreignObject',
optimized || !!vnode.dynamicChildren
)
}
if (transition && !transition.persisted) {
transition.beforeEnter(el)
}