-
-
Notifications
You must be signed in to change notification settings - Fork 3.7k
Description
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
- 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
- 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
- Remove the REACT_QUERY_OFFLINE_CACHE and refresh, it is working as expected
Render MySubComponent pending fetching
Render MySubComponent success idle
- 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