HydrationBoundary double fetching on subsequent visits
Mantenedores costumam responder em até 1 dia
@sukvvon já está trabalhando nisso.
Desde 14/12/2025.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 35/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- react, typescript
- Domínio
- frontend
Direção de pesquisa
Comece com a reprodução no StackBlitz e acompanhe o loader, HydrationBoundary, React.useMemo/useEffect e o comportamento de refetchOnMount ao navegar para fora e voltar. Confirme que o servidor calcula dados dehydrated novos duas vezes e, em seguida, verifique que uma query nova do loader não faz refetch no cliente antes que a hidratação seja concluída.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Describe the bug
I used HydrationBoundary in React Router. In loader(), I get the data, dehydrate it, then hydrate the client side query client.
- For the first visit, since it's a new query, it got hydrated in
React.useMemo - For subsequent visits, it will be deferred to
React.useEffect, however, if the cache is stale, query client will refetch beforeuseEffect, which makes the server compute the data twice: one in loader, the other in the component
I looked into the source code and found that it's due to refetchOnMount, which is true by default. I think it would be plausible to prevent a refetch if the query in the dehydrated state is fresh.
There are some experiments in the provided code, e.g. initialData from React Query meets React Router, initialData + initialDataUpdatedAt, HydrationBoundary, and my custom hook use-hydrated-query which sets refetchOnMount to false for that query if not explicitly provided during hydration. You may navigate away and back for each experiment and see the log in console to reproduce the issue.
Your minimal, reproducible example
https://stackblitz.com/edit/vitejs-vite-yiggax3s
Steps to reproduce
mentioned in 'Describe the bug'
Expected behavior
If query is fresh from loader(), client side query client should not refetch
How often does this bug happen?
Every time
Screenshots or Videos
No response
Platform
Any browser
Tanstack Query adapter
react-query
TanStack Query version
v5.85.3
TypeScript version
5.8.3
Additional context
No response
- Linguagem predominante
- TypeScript
- Estrelas
- 50.4k
- Forks
- 4.2k
- Merge médio
- 7h 29min
- PRs com merge (30d)
- 393
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de TanStack/query
-
solid-query: STRICT_READ_UNTRACKED on Solid 2 — client()/options() read in component body (useMutation, useBaseQuery)Talvez livre de novo Um pull request para esta issue foi fechado sem ser mesclado. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
TanStack/query#11358 · 2 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
-
solid-query: switching the queryClient accessor strands the new client's cache (subscription stays on the old observer)Talvez já em andamento @MaNaN1803 assumiu há 75 dias. Aberta
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
TanStack/query#11106 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
restoreQueries and persisterGc throw on malformed persisted entriesTalvez já em andamento @VGontier-cmd assumiu hoje. Aberta
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 72/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 45/100
Mantenedores costumam responder em até 1 dia
-
setQueryData: NoInfer loses discriminated-union members when spreading a narrowed updater valueTalvez já em andamento @iosayin assumiu há 2 dias. Aberta
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
Mantenedores costumam responder em até 1 dia
Todas as issues de TanStack/query
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
wardian-app/Wardian#1603 ·
Mantenedores costumam responder em até 1 dia
-
Sign the pledgeAberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 85/100
input-output-hk/devx-updates#168 ·
Mantenedores costumam responder em até 1 dia
-
triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
github/docs#46222 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
agent-ready area: config area: skills type: chore upstream: brain-kit
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 95/100
-
dev experience frontend good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
cuttle-cards/cuttle#1403 ·
Mantenedores costumam responder em até 1 dia