Skip to content

Commit cef8860

Browse files
committed
fix: views map corruption + view not removed from unusedPool
1 parent a14747d commit cef8860

File tree

1 file changed

+17
-19
lines changed

1 file changed

+17
-19
lines changed

Diff for: packages/vue-virtual-scroller/src/components/RecycleScroller.vue

+17-19
Original file line numberDiff line numberDiff line change
@@ -527,7 +527,7 @@ export default {
527527
528528
const unusedIndex = continuous ? null : new Map()
529529
530-
let item, type, unusedPool
530+
let item, type
531531
let v
532532
for (let i = startIndex; i < endIndex; i++) {
533533
item = items[i]
@@ -542,23 +542,19 @@ export default {
542542
continue
543543
}
544544
545+
let unusedPool = unusedViews.get(type)
546+
545547
// No view assigned to item
546548
if (!view) {
547549
if (i === items.length - 1) this.$emit('scroll-end')
548550
if (i === 0) this.$emit('scroll-start')
549551
550552
type = item[typeField]
551-
unusedPool = unusedViews.get(type)
552553
553554
if (continuous) {
554555
// Reuse existing view
555556
if (unusedPool && unusedPool.length) {
556557
view = unusedPool.pop()
557-
view.item = item
558-
view.nr.used = true
559-
view.nr.index = i
560-
view.nr.key = key
561-
view.nr.type = type
562558
} else {
563559
view = this.addView(pool, i, item, key, type)
564560
}
@@ -575,23 +571,25 @@ export default {
575571
}
576572
577573
view = unusedPool[v]
578-
view.item = item
579-
view.nr.used = true
580-
view.nr.index = i
581-
view.nr.key = key
582-
view.nr.type = type
583574
unusedIndex.set(type, v + 1)
584-
v++
585575
}
586-
views.set(key, view)
587576
} else {
588-
view.item = item
589-
view.nr.used = true
590-
view.nr.index = i
591-
view.nr.key = key
592-
view.nr.type = type
577+
// View already assigned to item
578+
if (unusedPool) {
579+
const index = unusedPool.indexOf(view)
580+
if (index !== -1) unusedPool.splice(index, 1)
581+
}
593582
}
594583
584+
// Assign view to item
585+
views.delete(view.nr.key)
586+
view.item = item
587+
view.nr.used = true
588+
view.nr.index = i
589+
view.nr.key = key
590+
view.nr.type = type
591+
views.set(key, view)
592+
595593
// Update position
596594
if (itemSize === null) {
597595
view.position = sizes[i - 1].accumulator

0 commit comments

Comments
 (0)