Skip to content

Commit a388129

Browse files
authored
fix(runtime-core): handle NaN identity check in v-memo (#5852)
fix #5853
1 parent d36ca4d commit a388129

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

packages/runtime-core/__tests__/helpers/withMemo.spec.ts

+13
Original file line numberDiff line numberDiff line change
@@ -210,4 +210,17 @@ describe('v-memo', () => {
210210
// should update
211211
expect(el.innerHTML).toBe(`<div>2</div><div>2</div><div>2</div>`)
212212
})
213+
214+
test('v-memo dependency is NaN should be equal', async () => {
215+
const [el, vm] = mount({
216+
template: `<div v-memo="[x]">{{ y }}</div>`,
217+
data: () => ({ x: NaN, y: 0 })
218+
})
219+
expect(el.innerHTML).toBe(`<div>0</div>`)
220+
221+
vm.y++
222+
// should not update
223+
await nextTick()
224+
expect(el.innerHTML).toBe(`<div>0</div>`)
225+
})
213226
})

packages/runtime-core/src/helpers/withMemo.ts

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { hasChanged } from '@vue/shared'
12
import { currentBlock, isBlockTreeEnabled, VNode } from '../vnode'
23

34
export function withMemo(
@@ -22,8 +23,9 @@ export function isMemoSame(cached: VNode, memo: any[]) {
2223
if (prev.length != memo.length) {
2324
return false
2425
}
26+
2527
for (let i = 0; i < prev.length; i++) {
26-
if (prev[i] !== memo[i]) {
28+
if (hasChanged(prev[i], memo[i])) {
2729
return false
2830
}
2931
}

0 commit comments

Comments
 (0)