import { Await, createFileRoute } from '@tanstack/react-router' import { createServerFn } from '@tanstack/react-start' import { Suspense, useState } from 'react' import { Button } from '@/components/ui/button' import { Skeleton } from '@/components/ui/skeleton' import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card' const personServerFn = createServerFn({ method: 'GET' }) .inputValidator((d: string) => d) .handler(({ data: name }) => { return { name, randomNumber: Math.floor(Math.random() * 100) } }) const slowServerFn = createServerFn({ method: 'GET' }) .inputValidator((d: string) => d) .handler(async ({ data: name }) => { await new Promise((r) => setTimeout(r, 1000)) return { name, randomNumber: Math.floor(Math.random() * 100) } }) export const Route = createFileRoute('/deferred')({ loader: async () => { return { deferredStuff: new Promise((r) => setTimeout(() => r('Hello deferred!'), 2000), ), deferredPerson: slowServerFn({ data: 'Tanner Linsley' }), person: await personServerFn({ data: 'John Doe' }), } }, component: Deferred, }) function Deferred() { const [count, setCount] = useState(0) const { deferredStuff, deferredPerson, person } = Route.useLoaderData() return (
Deferred Data Demo
Instant: {person.name} - {person.randomNumber}
}> (
Deferred (1s): {data.name} - {data.randomNumber}
)} />
}> (

{data}

)} />
Count: {count}
) }