fix(svelte-virtual): force store update when setOptions is called#1143
Open
isaackaara wants to merge 1 commit intoTanStack:mainfrom
Open
fix(svelte-virtual): force store update when setOptions is called#1143isaackaara wants to merge 1 commit intoTanStack:mainfrom
isaackaara wants to merge 1 commit intoTanStack:mainfrom
Conversation
When options like `count` change but the visible range stays the same, `onChange` is never called (it only fires on range changes). This means the Svelte store is not updated and the component does not re-render. Fix by calling `virtualizerWritable.set(virtualizer)` after _willUpdate() so the store always reflects the latest virtualizer state after any options change. This mirrors how vue-virtual uses `triggerRef(state)` after _willUpdate(). Fixes TanStack#969
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
When options like
countchange but the visible range stays the same,onChangenever fires (it only fires on range changes viamaybeNotify). This means the Svelte store is not updated, so the component doesn't re-render — even though the virtualizer has new items.Reproduction: increase
countwhile scrolled near the top of the list. The new items are never rendered because the range (e.g. 0–9) hasn't changed.Fix: call
virtualizerWritable.set(virtualizer)after_willUpdate()so the store is always refreshed whensetOptionsis called explicitly. Svelte treats same-reference objects as changed (due tosafe_not_equalreturningtruefor objects), so this correctly triggers a re-render.This mirrors what
vue-virtualalready does: it callstriggerRef(state)after_willUpdate()for the same reason.Fixes #969