From b6a78a4d879b6c49ed9f3b2011e55dbbf299e3bb Mon Sep 17 00:00:00 2001 From: daiwei Date: Wed, 15 Jan 2025 11:07:23 +0800 Subject: [PATCH] wip: save --- .../transforms/__snapshots__/vMemo.spec.ts.snap | 12 ++++++------ packages/compiler-core/src/transforms/vFor.ts | 4 ++-- packages/runtime-core/src/helpers/renderList.ts | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/vMemo.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/vMemo.spec.ts.snap index b561bde6d..8b536c50b 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/vMemo.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/vMemo.spec.ts.snap @@ -5,14 +5,14 @@ exports[`compiler: v-memo transform > element v-for key expression prefixing + v export function render(_ctx, _cache) { return (_openBlock(), _createElementBlock("div", null, [ - (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tableData, (data, _key, ___, _cached) => { + (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.tableData, (data, __, _i, _cached) => { const _memo = (_ctx.getLetter(data)) if (_cached && _cached.el && _cached.key === _ctx.getId(data) && _isMemoSame(_cached, _memo)) return _cached const _item = (_openBlock(), _createElementBlock("span", { key: _ctx.getId(data) })) _item.memo = _memo - _item.cacheIndex = [0, _key] + _item.cacheIndex = [0, _i] return _item }, _cache, 0), 128 /* KEYED_FRAGMENT */)) ])) @@ -54,12 +54,12 @@ exports[`compiler: v-memo transform > on template v-for 1`] = ` export function render(_ctx, _cache) { return (_openBlock(), _createElementBlock("div", null, [ - (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, ({ x, y }, _key, ___, _cached) => { + (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, ({ x, y }, __, _i, _cached) => { const _memo = ([x, y === _ctx.z]) if (_cached && _cached.el && _cached.key === x && _isMemoSame(_cached, _memo)) return _cached const _item = (_openBlock(), _createElementBlock("span", { key: x }, "foobar")) _item.memo = _memo - _item.cacheIndex = [0, _key] + _item.cacheIndex = [0, _i] return _item }, _cache, 0), 128 /* KEYED_FRAGMENT */)) ])) @@ -71,14 +71,14 @@ exports[`compiler: v-memo transform > on v-for 1`] = ` export function render(_ctx, _cache) { return (_openBlock(), _createElementBlock("div", null, [ - (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, ({ x, y }, _key, ___, _cached) => { + (_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, ({ x, y }, __, _i, _cached) => { const _memo = ([x, y === _ctx.z]) if (_cached && _cached.el && _cached.key === x && _isMemoSame(_cached, _memo)) return _cached const _item = (_openBlock(), _createElementBlock("div", { key: x }, [ _createElementVNode("span", null, "foobar") ])) _item.memo = _memo - _item.cacheIndex = [0, _key] + _item.cacheIndex = [0, _i] return _item }, _cache, 0), 128 /* KEYED_FRAGMENT */)) ])) diff --git a/packages/compiler-core/src/transforms/vFor.ts b/packages/compiler-core/src/transforms/vFor.ts index 872965d5a..664909443 100644 --- a/packages/compiler-core/src/transforms/vFor.ts +++ b/packages/compiler-core/src/transforms/vFor.ts @@ -218,7 +218,7 @@ export const transformFor: NodeTransform = createStructuralDirectiveTransform( } if (memo) { - forNode.parseResult.key = createSimpleExpression('_key') + forNode.parseResult.index = createSimpleExpression('_i') const loop = createFunctionExpression( createForLoopParams(forNode.parseResult, [ createSimpleExpression(`_cached`), @@ -236,7 +236,7 @@ export const transformFor: NodeTransform = createStructuralDirectiveTransform( createCompoundExpression([`const _item = `, childBlock as any]), createSimpleExpression(`_item.memo = _memo`), createSimpleExpression( - `_item.cacheIndex = [${context.cached.length}, _key]`, + `_item.cacheIndex = [${context.cached.length}, _i]`, ), createSimpleExpression(`return _item`), ]) diff --git a/packages/runtime-core/src/helpers/renderList.ts b/packages/runtime-core/src/helpers/renderList.ts index bbcbcc130..3b4a8c2fa 100644 --- a/packages/runtime-core/src/helpers/renderList.ts +++ b/packages/runtime-core/src/helpers/renderList.ts @@ -78,7 +78,7 @@ export function renderList( ret[i] = renderItem( needsWrap ? toReactive(source[i]) : source[i], i, - undefined, + i, cached && cached[i], ) } @@ -88,12 +88,12 @@ export function renderList( } ret = new Array(source) for (let i = 0; i < source; i++) { - ret[i] = renderItem(i + 1, i, undefined, cached && cached[i]) + ret[i] = renderItem(i + 1, i, i, cached && cached[i]) } } else if (isObject(source)) { if (source[Symbol.iterator as any]) { ret = Array.from(source as Iterable, (item, i) => - renderItem(item, i, undefined, cached && cached[i]), + renderItem(item, i, i, cached && cached[i]), ) } else { const keys = Object.keys(source)