If you find yourself wishing for whatever reason that you could just share the same query function for your entire app and just use query keys to identify what it should fetch, you can do that by providing a default query function to TanStack Query:
// Define a default query function that will receive the query keyconst defaultQueryFn = async ({ queryKey }) => { const { data } = await axios.get( `https://jsonplaceholder.typicode.com${queryKey[0]}`, ) return data}
// provide the default query function to your app with defaultOptionsconst queryClient = new QueryClient({ defaultOptions: { queries: { queryFn: defaultQueryFn, }, },})
function App() { return ( <QueryClientProvider client={queryClient}> <YourApp /> </QueryClientProvider> )}
// All you have to do now is pass a key!function Posts() { const { status, data, error, isFetching } = useQuery({ queryKey: ['/posts'] })
// ...}
// You can even leave out the queryFn and just go straight into optionsfunction Post({ postId }) { const { status, data, error, isFetching } = useQuery({ queryKey: [`/posts/${postId}`], enabled: !!postId, })
// ...}
If you ever want to override the default queryFn, you can just provide your own like you normally would.
“This course is the best way to learn how to use React Query in real-world applications.”—Tanner LinsleyCheck it out