import { QueryClient, isServer} from "@tanstack/react-query"
function makeQueryClient(){
return new QueryClient({
defaultOptions:{
queries:{
staleTime: 60 * 1000
},
}
})
}
let browserQueryClient: QueryClient | undefined = undefined;
export function getQueryClient(){
if(isServer){
return makeQueryClient()
}else{
if(!browserQueryClient) browserQueryClient = makeQueryClient()
return browserQueryClient
}
}
Note: On the server, it returns a new instance of the query client. However, if we're not on the server, if you're on the browser, we use the same client in every component.
Provider:
"use client"
import {QueryClientProvider} from "@tanstack/react-query"
import {getQueryClient} from "./getQueryClient"
export function ReactQueryProvider({children}){
const queryClient = getQueryClient()
return(
<QueryClientProvider client={queryClient}>{children}</QueryClientProvider>
)
}
**"use client"**
import {useQuery} from "@tanstack/react-query"
import {getPosts} from "@/services/get-post"
export async function Post(){
const queryClient = getQueryClient()
await {data}= useQuery({
queryKey:["posts"],
queryFn:getPosts
})
return(
<div state={dehydrate(queryClient)}>
<h1>post</h1>
{
data.map(post=>(
<div>
<h2>{post.name}</h2>
</div>
))
}
</div>
)}