fix(core): generate fragment root with patchFlag + optimize fragment w/ patchFlag

This commit is contained in:
Evan You 2019-12-12 17:58:32 -05:00
parent efe39db023
commit ef50c333ce
3 changed files with 13 additions and 3 deletions

View File

@ -18,7 +18,13 @@ import {
CacheExpression,
createCacheExpression
} from './ast'
import { isString, isArray, NOOP } from '@vue/shared'
import {
isString,
isArray,
NOOP,
PatchFlags,
PatchFlagNames
} from '@vue/shared'
import { defaultOnError } from './errors'
import {
TO_STRING,
@ -283,7 +289,10 @@ function finalizeRoot(root: RootNode, context: TransformContext) {
createCallExpression(helper(CREATE_BLOCK), [
helper(FRAGMENT),
`null`,
root.children
root.children,
`${PatchFlags.UNKEYED_FRAGMENT} /* ${
PatchFlagNames[PatchFlags.UNKEYED_FRAGMENT]
} */`
]),
context
)

View File

@ -79,7 +79,7 @@ export const transformFor = createStructuralDirectiveTransform(
helper(FRAGMENT),
`null`,
renderExp,
fragmentFlag + (__DEV__ ? ` /* ${PatchFlagNames[fragmentFlag]} */` : ``)
`${fragmentFlag} /* ${PatchFlagNames[fragmentFlag]} */`
])
]) as ForCodegenNode

View File

@ -1033,6 +1033,7 @@ export function createRenderer<
}
// fast path
if (patchFlag > 0) {
optimized = true
if (patchFlag & PatchFlags.KEYED_FRAGMENT) {
// this could be either fully-keyed or mixed (some keyed some not)
// presence of patchFlag means children are guaranteed to be arrays