-
-
Notifications
You must be signed in to change notification settings - Fork 2.9k
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
isLoading is always return true after go other page 2 too fast (before loading in page 1 success) #8281
Comments
Thank you for filing this issue, but we need more information before looking into this. Specifically, a minimal, standalone, runnable reproduction is needed - preferably with codesandbox or stackblitz. We'll close this issue for now, but we'll certainly re-open it if there is a proper reproduction. |
@TkDodo thanks for your reply, i will give you a code sanbox soon. And you can see my video for more infor. Thanks |
Hi @TkDodo , Sorry for the slowly response, i already update the stackbliz code example and step to have the bug. Here is my stackbliz link https://stackblitz.com/edit/stackblitz-starters-xmhdkt?file=app%2Fpage.tsx |
It’s an interesting race condition. Here’s a fork with v5 + the devtools where it still shows up: https://stackblitz.com/edit/stackblitz-starters-fuohuu It goes away when the list query is not used on the details page. I’ll have to look into why that happens. |
Would be good to know if this is specific to nextJs or if it could be reproduced in other frameworks as well |
I happened in the "Link" component of nextjs. https://stackblitz.com/edit/stackblitz-starters-4tjsxt?file=app%2Fpage.tsx It didn't happen because the page was reloaded when using the 'a' tag. |
@parkinjong so, to be on the same page: the issue doesn’t show up when |
Describe the bug
I have page 1 /photos and two useQuery function
const { data: profileDetail } = useQuery({ queryKey: ["userProfile"], queryFn: () => getProfileDetail(), }); const { data: listUserToken, isLoading: isLoadingUserToken } = useQuery({ queryKey: ["listUserToken"], queryFn: async () => { const result = await getListUserToken(); return result; }, });
I hard reload this page and don't wait the query is success => and click to push in page 2
<div onClick={() => { router.push("/photos/1"); }} > Click {isLoadingUserToken ? "Loading..." : "Done"} </div>
In page 2 i will have some other useQuery function
const { data: userExp } = useQuery({ queryKey: ["userExp"], queryFn: () => getUserExp(), }); const { data: profileDetail } = useQuery({ queryKey: ["userProfile"], queryFn: () => getProfileDetail(), }); const { data: userLevel, isLoading: isLoadingUserLevel } = useQuery({ queryKey: ["getUserLevel"], queryFn: () => getUserLevel(), });
And then i don't wait the query success, i click to push page into page 1 (/photos)
<div onClick={() => { router.push("/photos"); }} > Back </div> {isLoadingUserLevel ? <div>Loading....</div> : "Loading done"}
And now, isLoadingUserLevel always return true
Your minimal, reproducible example
https://stackblitz.com/edit/stackblitz-starters-xmhdkt?file=app%2Fpage.tsx
Steps to reproduce
Step 1: Click go to photo Detail
Step 2: Reload page Photo detail and don't wait api loading success
Step 3: Spam click button go to list photo in page PhotoDetail (Dont wait api loading success)
Step 4: When go to List photo, spam again on button go to photo detail
Expected behavior
I expected isLoading work after reload and go to other page fast
How often does this bug happen?
Always when using this step
Screenshots or Videos
Screen.Recording.2024-11-12.at.09.55.34.mov
Platform
Tanstack Query adapter
react-query
TanStack Query version
^4.35.3
TypeScript version
^5
Additional context
No response
The text was updated successfully, but these errors were encountered: