|
|
@@ -1,16 +1,10 @@
|
|
|
import { createBrowserRouter, RouterProvider } from 'react-router-dom'
|
|
|
-import { use, Suspense } from 'react'
|
|
|
import { hc } from 'hono/client'
|
|
|
-import type { InferResponseType } from 'hono/client'
|
|
|
+import { useQuery } from '@tanstack/react-query'
|
|
|
import type { AppType } from '../server/api/base'
|
|
|
|
|
|
const client = hc<AppType>('/api')
|
|
|
|
|
|
-const fetchData = async () => {
|
|
|
- const data = await client.index.$get({ query: { name: 'Hono' } })
|
|
|
- return data.json()
|
|
|
-}
|
|
|
-
|
|
|
const Home = () => {
|
|
|
return (
|
|
|
<div>
|
|
|
@@ -29,9 +23,19 @@ const About = () => {
|
|
|
)
|
|
|
}
|
|
|
|
|
|
-const ApiDemo = ({ promise }: { promise: Promise<InferResponseType<typeof client.index.$get>> }) => {
|
|
|
- const data = use(promise)
|
|
|
- return <h2 className="text-2xl">{data.message}</h2>
|
|
|
+const ApiDemo = () => {
|
|
|
+ const { data, isLoading, error } = useQuery({
|
|
|
+ queryKey: ['apiData'],
|
|
|
+ queryFn: async () => {
|
|
|
+ const res = await client.index.$get({ query: { name: 'Hono' } })
|
|
|
+ return res.json()
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ if (isLoading) return <div>Loading...</div>
|
|
|
+ if (error) return <div>Error: {error.message}</div>
|
|
|
+
|
|
|
+ return <h2 className="text-2xl">{data?.message}</h2>
|
|
|
}
|
|
|
|
|
|
const router = createBrowserRouter([
|
|
|
@@ -45,11 +49,7 @@ const router = createBrowserRouter([
|
|
|
},
|
|
|
{
|
|
|
path: '/api-demo',
|
|
|
- element: (
|
|
|
- <Suspense fallback={'loading...'}>
|
|
|
- <ApiDemo promise={fetchData()} />
|
|
|
- </Suspense>
|
|
|
- ),
|
|
|
+ element: <ApiDemo />,
|
|
|
},
|
|
|
])
|
|
|
|