From 12fcf9ab953acdbb8706b549c7e63f69482a495a Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 10 Feb 2020 18:19:49 -0500 Subject: [PATCH] fix(compiler): fix v-for fragment openBlock argument --- .../__snapshots__/compile.spec.ts.snap | 6 ++--- .../__snapshots__/hoistStatic.spec.ts.snap | 6 ++--- .../__snapshots__/transformText.spec.ts.snap | 2 +- .../__snapshots__/vFor.spec.ts.snap | 22 +++++++++---------- packages/compiler-core/src/transforms/vFor.ts | 5 +++-- .../__tests__/ssrComponent.spec.ts | 4 ++-- packages/runtime-core/src/vnode.ts | 2 +- 7 files changed, 24 insertions(+), 23 deletions(-) diff --git a/packages/compiler-core/__tests__/__snapshots__/compile.spec.ts.snap b/packages/compiler-core/__tests__/__snapshots__/compile.spec.ts.snap index 21168dc096a..7afb6ffde87 100644 --- a/packages/compiler-core/__tests__/__snapshots__/compile.spec.ts.snap +++ b/packages/compiler-core/__tests__/__snapshots__/compile.spec.ts.snap @@ -15,7 +15,7 @@ return function render(_ctx, _cache) { (_openBlock(), ok ? _createBlock(\\"div\\", { key: 0 }, \\"yes\\") : _createBlock(_Fragment, { key: 1 }, [\\"no\\"])), - (_openBlock(false), _createBlock(_Fragment, null, _renderList(list, (value, index) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (value, index) => { return (_openBlock(), _createBlock(\\"div\\", null, [ _createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */) ])) @@ -37,7 +37,7 @@ return function render(_ctx, _cache) { (_openBlock(), (_ctx.ok) ? _createBlock(\\"div\\", { key: 0 }, \\"yes\\") : _createBlock(_Fragment, { key: 1 }, [\\"no\\"])), - (_openBlock(false), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => { return (_openBlock(), _createBlock(\\"div\\", null, [ _createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */) ])) @@ -58,7 +58,7 @@ export function render(_ctx, _cache) { (_openBlock(), (_ctx.ok) ? _createBlock(\\"div\\", { key: 0 }, \\"yes\\") : _createBlock(_Fragment, { key: 1 }, [\\"no\\"])), - (_openBlock(false), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (value, index) => { return (_openBlock(), _createBlock(\\"div\\", null, [ _createVNode(\\"span\\", null, _toDisplayString(value + index), 1 /* TEXT */) ])) diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap index 0b355441d6d..205a134786d 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap @@ -229,7 +229,7 @@ return function render(_ctx, _cache) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, toDisplayString: _toDisplayString, createVNode: _createVNode } = _Vue return (_openBlock(), _createBlock(\\"div\\", null, [ - (_openBlock(false), _createBlock(_Fragment, null, _renderList(_ctx.list, (o) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (o) => { return (_openBlock(), _createBlock(\\"p\\", null, [ _createVNode(\\"span\\", null, _toDisplayString(o + 'foo'), 1 /* TEXT */) ])) @@ -264,7 +264,7 @@ return function render(_ctx, _cache) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, toDisplayString: _toDisplayString, createVNode: _createVNode } = _Vue return (_openBlock(), _createBlock(\\"div\\", null, [ - (_openBlock(false), _createBlock(_Fragment, null, _renderList(_ctx.list, (o) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (o) => { return (_openBlock(), _createBlock(\\"p\\", null, [ _createVNode(\\"span\\", null, _toDisplayString(o), 1 /* TEXT */) ])) @@ -356,7 +356,7 @@ return function render(_ctx, _cache) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue return (_openBlock(), _createBlock(\\"div\\", null, [ - (_openBlock(false), _createBlock(_Fragment, null, _renderList(list, (i) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (i) => { return (_openBlock(), _createBlock(\\"div\\", _hoisted_1, [ _hoisted_2 ])) diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/transformText.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/transformText.spec.ts.snap index 8c133b21938..f7589773933 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/transformText.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/transformText.spec.ts.snap @@ -7,7 +7,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createTextVNode: _createTextVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(list, (i) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (i) => { return (_openBlock(), _createBlock(_Fragment, null, [ _createTextVNode(\\"foo\\") ], 64 /* STABLE_FRAGMENT */)) diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap index 884344fe50b..f896882061b 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/vFor.spec.ts.snap @@ -7,7 +7,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item) => { return (_openBlock(), _createBlock(\\"span\\")) }), 256 /* UNKEYED_FRAGMENT */)) } @@ -21,7 +21,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item) => { return (_openBlock(), _createBlock(_Fragment, { key: item }, [ \\"hello\\", _createVNode(\\"span\\") @@ -38,7 +38,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item) => { return (_openBlock(), _createBlock(\\"span\\", { key: item })) }), 128 /* KEYED_FRAGMENT */)) } @@ -52,7 +52,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item, __, index) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item, __, index) => { return (_openBlock(), _createBlock(\\"span\\")) }), 256 /* UNKEYED_FRAGMENT */)) } @@ -66,7 +66,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (_, __, index) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (_, __, index) => { return (_openBlock(), _createBlock(\\"span\\")) }), 256 /* UNKEYED_FRAGMENT */)) } @@ -80,7 +80,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (_, key, index) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (_, key, index) => { return (_openBlock(), _createBlock(\\"span\\")) }), 256 /* UNKEYED_FRAGMENT */)) } @@ -94,7 +94,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item) => { return (_openBlock(), _createBlock(_Fragment, null, [ \\"hello\\", _createVNode(\\"span\\") @@ -111,7 +111,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, renderSlot: _renderSlot } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item) => { return _renderSlot($slots, \\"default\\") }), 256 /* UNKEYED_FRAGMENT */)) } @@ -125,7 +125,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, renderSlot: _renderSlot } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item) => { return _renderSlot($slots, \\"default\\") }), 256 /* UNKEYED_FRAGMENT */)) } @@ -141,7 +141,7 @@ return function render(_ctx, _cache) { const _directive_foo = _resolveDirective(\\"foo\\") - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(list, (i) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (i) => { return (_openBlock(), _withDirectives(_createBlock(\\"div\\", null, null, 32 /* NEED_PATCH */), [ [_directive_foo] ])) @@ -173,7 +173,7 @@ return function render(_ctx, _cache) { with (this) { const { renderList: _renderList, openBlock: _openBlock, createBlock: _createBlock, Fragment: _Fragment, createVNode: _createVNode } = _Vue - return (_openBlock(false), _createBlock(_Fragment, null, _renderList(items, (item, key, index) => { + return (_openBlock(true), _createBlock(_Fragment, null, _renderList(items, (item, key, index) => { return (_openBlock(), _createBlock(\\"span\\")) }), 256 /* UNKEYED_FRAGMENT */)) } diff --git a/packages/compiler-core/src/transforms/vFor.ts b/packages/compiler-core/src/transforms/vFor.ts index 1032c0a5643..48b2e3d1e82 100644 --- a/packages/compiler-core/src/transforms/vFor.ts +++ b/packages/compiler-core/src/transforms/vFor.ts @@ -57,8 +57,9 @@ export const transformFor = createStructuralDirectiveTransform( ? PatchFlags.KEYED_FRAGMENT : PatchFlags.UNKEYED_FRAGMENT forNode.codegenNode = createSequenceExpression([ - // fragment blocks disable tracking since they always diff their children - createCallExpression(helper(OPEN_BLOCK), [`false`]), + // v-for fragment blocks disable tracking since they always diff their + // children + createCallExpression(helper(OPEN_BLOCK), [`true`]), createCallExpression(helper(CREATE_BLOCK), [ helper(FRAGMENT), `null`, diff --git a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts index 2318134cfa8..828741b6906 100644 --- a/packages/compiler-ssr/__tests__/ssrComponent.spec.ts +++ b/packages/compiler-ssr/__tests__/ssrComponent.spec.ts @@ -231,7 +231,7 @@ describe('ssr: components', () => { return [ (_openBlock(), (_ctx.ok) ? _createBlock(\\"div\\", { key: 0 }, [ - (_openBlock(false), _createBlock(_Fragment, null, _renderList(list, (i) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(list, (i) => { return (_openBlock(), _createBlock(\\"span\\")) }), 256 /* UNKEYED_FRAGMENT */)) ]) @@ -254,7 +254,7 @@ describe('ssr: components', () => { return [ (_openBlock(), ok ? _createBlock(\\"div\\", { key: 0 }, [ - (_openBlock(false), _createBlock(_Fragment, null, _renderList(_ctx.list, (i) => { + (_openBlock(true), _createBlock(_Fragment, null, _renderList(_ctx.list, (i) => { return (_openBlock(), _createBlock(\\"span\\")) }), 256 /* UNKEYED_FRAGMENT */)) ]) diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index 97b09eb0d8f..c57dfae02f4 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -134,7 +134,7 @@ let currentBlock: VNode[] | null = null // // disableTracking is true when creating a fragment block, since a fragment // always diffs its children. -export function openBlock(disableTracking?: boolean) { +export function openBlock(disableTracking = false) { blockStack.push((currentBlock = disableTracking ? null : [])) }