[SOLVED] Solid Router v11 + TanStack Query issue
I'm migrating my app's solid router from v0.8 to v0.11 (currently the latest version). I'm having a problem making it work together with TanStack Query. Previously, I had my TanStack Query calls inside of route data functions. Now, when migrated to the load functions, when I hover over the component that sends you to the next route, I get the error from TanStack Query: "No QueryClient set, use QueryClientProvider to set one". It seems that TanStack Query is not initialized in the load function. I've also tried wrapping the Routes component with the client provider, but I get the same error.
Thanks to all for reading! If anyone has any suggestions regarding this issue, I'd appreciate it.
App + Router component:
routes.ts in short:
UserData:
3 Replies
I think only contexts defined above yout router are available in
load()
, but that's ignoring the fact that createQuery
isn't meant to be called in load()
. use ensureQueryData
instead
https://tanstack.com/query/latest/docs/reference/QueryClient#queryclientensurequerydataQueryClient | TanStack Query Docs
QueryClient
The QueryClient can be used to interact with a cache:
Not sure if same issue, but I just spend hour trying to fix same No QueryClient set, use QueryClientProvider issue. Deleting lockfile and node_modules fixed the error
Thank you for the answers. I've moved my
createQuery
to the component level and used the esureQueryData
in the load function. I've also added a delay of 1 second to the fetchMe function so I can see does the prefetched cache works as expected. On hover of the link I can see that the ensureQueryData
fetches the needed data, but when I actually click to go to the next route createQuery
again takes 1 second to respond, instead of returning the prefetched results. Do you have an idea of where could be the issue?
As a side note, with this setup, to ensure that there is no error thrown: No QueryClient set, use QueryClientProvider to set one
, I needed to wrap the Routes
component with the QueryClientProvider
, instead of wrapping the App
component.
It seems that the problem lies on my end. To eliminate all the extraneous noise in my codebase regarding this problem, I've created a fresh Solid.js template with Tanstack Query and Solid Router v0.11. In this simplified setup, everything appears to be functioning correctly. I'm using ensureQueryData
in load functions and createQuery
in components, allowing me to retrieve cached results from the load function as expected. Here's the repository if anybody is interested in the setup: https://github.com/agazibaric/solid-with-tanstack-query.
Thank you for your assistance!