return (_openBlock(), _createElementBlock(\\"div\\", null, [
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, ({ x, y }, __, ___, _cached) => {
const _memo = ([x, y === z])
- if (_cached && _cached.key === x && _isMemoSame(_cached.memo, _memo)) return _cached
+ if (_cached && _cached.key === x && _isMemoSame(_cached, _memo)) return _cached
const _item = (_openBlock(), _createElementBlock(\\"span\\", { key: x }, \\"foobar\\"))
_item.memo = _memo
return _item
return (_openBlock(), _createElementBlock(\\"div\\", null, [
(_openBlock(true), _createElementBlock(_Fragment, null, _renderList(_ctx.list, ({ x, y }, __, ___, _cached) => {
const _memo = ([x, y === _ctx.z])
- if (_cached && _cached.key === x && _isMemoSame(_cached.memo, _memo)) return _cached
+ if (_cached && _cached.key === x && _isMemoSame(_cached, _memo)) return _cached
const _item = (_openBlock(), _createElementBlock(\\"div\\", { key: x }, [
_createElementVNode(\\"span\\", null, \\"foobar\\")
]))
...(keyExp ? [` && _cached.key === `, keyExp] : []),
` && ${context.helperString(
IS_MEMO_SAME
- )}(_cached.memo, _memo)) return _cached`
+ )}(_cached, _memo)) return _cached`
]),
createCompoundExpression([`const _item = `, childBlock as any]),
createSimpleExpression(`_item.memo = _memo`),
index: number
) {
const cached = cache[index] as VNode | undefined
- if (cached && isMemoSame(cached.memo!, memo)) {
- // make sure to let parent block track it when returning cached
- if (isBlockTreeEnabled > 0 && currentBlock) {
- currentBlock.push(cached)
- }
+ if (cached && isMemoSame(cached, memo)) {
return cached
}
const ret = render()
return (cache[index] = ret)
}
-export function isMemoSame(prev: any[], next: any[]) {
+export function isMemoSame(cached: VNode, memo: any[]) {
+ const prev: any[] = cached.memo!
for (let i = 0; i < prev.length; i++) {
- if (prev[i] !== next[i]) {
+ if (prev[i] !== memo[i]) {
return false
}
}
+
+ // make sure to let parent block track it when returning cached
+ if (isBlockTreeEnabled > 0 && currentBlock) {
+ currentBlock.push(cached)
+ }
return true
}