import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
import { createFileRoute } from "@tanstack/react-router";
import { Suspense } from "react";
import { orpc } from "@/orpc/client";
export const Route = createFileRoute("/blog/")({
component: Blog,
loader: async ({ context }) => {
context.queryClient.ensureQueryData(
orpc.getBlogPosts.queryOptions({
input: {},
queryKey: ["blogPosts"],
staleTime: 1000 * 60 * 5, // 5 minutes
cacheTime: 1000 * 60 * 10, // 10 minutes
}),
);
},
});
function BlogSkeleton() {
return <div>Loading...</div>;
}
function BlogComponent() {
const allBlogPosts = useSuspenseQuery(
orpc.getBlogPosts.queryOptions({
input: {},
queryKey: ["blogPosts"],
staleTime: 1000 * 60 * 5, // 5 minutes
cacheTime: 1000 * 60 * 10, // 10 minutes
}),
);
return (
<div>
<h1>Blog</h1>
{JSON.stringify(allBlogPosts.data)}
</div>
);
}
function Blog() {
return (
<div>
<Suspense fallback={<BlogSkeleton />}>
<BlogComponent />
</Suspense>
</div>
);
}
import { useQuery, useSuspenseQuery } from "@tanstack/react-query";
import { createFileRoute } from "@tanstack/react-router";
import { Suspense } from "react";
import { orpc } from "@/orpc/client";
export const Route = createFileRoute("/blog/")({
component: Blog,
loader: async ({ context }) => {
context.queryClient.ensureQueryData(
orpc.getBlogPosts.queryOptions({
input: {},
queryKey: ["blogPosts"],
staleTime: 1000 * 60 * 5, // 5 minutes
cacheTime: 1000 * 60 * 10, // 10 minutes
}),
);
},
});
function BlogSkeleton() {
return <div>Loading...</div>;
}
function BlogComponent() {
const allBlogPosts = useSuspenseQuery(
orpc.getBlogPosts.queryOptions({
input: {},
queryKey: ["blogPosts"],
staleTime: 1000 * 60 * 5, // 5 minutes
cacheTime: 1000 * 60 * 10, // 10 minutes
}),
);
return (
<div>
<h1>Blog</h1>
{JSON.stringify(allBlogPosts.data)}
</div>
);
}
function Blog() {
return (
<div>
<Suspense fallback={<BlogSkeleton />}>
<BlogComponent />
</Suspense>
</div>
);
}