Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

#initialState set incorrectly to persisted state #6682

Closed
rklomp opened this issue Jan 11, 2024 · 3 comments · Fixed by #7837
Closed

#initialState set incorrectly to persisted state #6682

rklomp opened this issue Jan 11, 2024 · 3 comments · Fixed by #7837

Comments

@rklomp
Copy link
Contributor

rklomp commented Jan 11, 2024

Describe the bug

When using PersistQueryClientProvider the query #initialState will be set to the state loaded from storage on page/app load. Running resetQueries will now give unexpected behaviour across app reloads.


Looks like hydrate is using QueryCache.build() to create queries
https://github.com/TanStack/query/blob/main/packages/query-core/src/hydration.ts#L145-L159
This will create a new Query:
https://github.com/TanStack/query/blob/main/packages/query-core/src/queryCache.ts#L111-L118
Since state is set, #initialState will be set to config.state
https://github.com/TanStack/query/blob/main/packages/query-core/src/query.ts#L177

Your minimal, reproducible example

https://codesandbox.io/p/sandbox/query-async-test-rqf58n

Steps to reproduce

  1. Open Sandbox. And press Refetch Query A.
    If this is the first time you open the page you should see in the console:
Render MySubComponent pending fetching
Render MySubComponent success idle
  1. Reload page and press Refetch Query A again.
    Data was now loaded from storage and you will see
Render MySubComponent success fetching
Render MySubComponent success idle
  1. Remove the REACT_QUERY_OFFLINE_CACHE and refresh, it is working as expected
Render MySubComponent pending fetching
Render MySubComponent success idle
  1. Go to Step 2

Expected behavior

I expect initialState to be consistent across reloads. So when not setting initialData, running resetQueries will give status: 'pending', data: undefined even after the query was loaded from storage. I think we should persist #initialState to storage as well.

How often does this bug happen?

Every time

Screenshots or Videos

No response

Platform

Any

Tanstack Query adapter

react-query

TanStack Query version

v5.17.9

TypeScript version

No response

Additional context

Discussion with @TkDodo
https://discord.com/channels/719702312431386674/1194615111529287820

@aitrusgit
Copy link

Did you manage to find any workaround? I tried messing with the state after queries are loaded from the persistent store, but I only ended up with inconsistent states.

@rklomp
Copy link
Contributor Author

rklomp commented Feb 23, 2024

I ended up using a slightly different approach that works around this limitation.
But still I am having issues with options not being persisted and thus being changed after an app restart.
Currently looking at https://tanstack.com/query/latest/docs/framework/react/plugins/createPersister and considering to change to this way of persisting.

@mattijsf
Copy link

mattijsf commented Apr 18, 2024

We are also running into this issue with v4. No solution yet, I tried changing the throttleTime to 1 or 0 but this has no effect. I tried deleting the data from the store itself right before .resetQueries() but it still doesn't reset the cache.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants