2
0
yourname 6 місяців тому
батько
коміт
e5d18152b1
4 змінених файлів з 45 додано та 10 видалено
  1. 1 0
      package.json
  2. 41 7
      src/client/app.tsx
  3. 2 2
      src/server/index.tsx
  4. 1 1
      src/server/renderer.tsx

+ 1 - 0
package.json

@@ -18,6 +18,7 @@
     "hono": "^4.7.6",
     "react": "^19.1.0",
     "react-dom": "^19.1.0",
+    "react-router-dom": "^7.6.1",
     "zod": "^3.24.2"
   },
   "devDependencies": {

+ 41 - 7
src/client/app.tsx

@@ -1,3 +1,4 @@
+import { createBrowserRouter, RouterProvider } from 'react-router-dom'
 import { use, Suspense } from 'react'
 import { hc } from 'hono/client'
 import type { InferResponseType } from 'hono/client'
@@ -10,17 +11,50 @@ const fetchData = async () => {
   return data.json()
 }
 
-const Component = ({ promise }: { promise: Promise<InferResponseType<typeof client.index.$get>> }) => {
-  const data = use(promise)
-  return <h2 className="text-2xl">11{data.message}{JSON.stringify(import.meta.env)}</h2>
+const Home = () => {
+  return (
+    <div>
+      <h1>Home Page</h1>
+      <p>Welcome to the home page!</p>
+    </div>
+  )
 }
 
-const App = () => {
+const About = () => {
   return (
-    <Suspense fallback={'loading...'}>
-      <Component promise={fetchData()} />
-    </Suspense>
+    <div>
+      <h1>About Page</h1>
+      <p>This is the about page.</p>
+    </div>
   )
 }
 
+const ApiDemo = ({ promise }: { promise: Promise<InferResponseType<typeof client.index.$get>> }) => {
+  const data = use(promise)
+  return <h2 className="text-2xl">{data.message}{JSON.stringify(import.meta.env)}</h2>
+}
+
+const router = createBrowserRouter([
+  {
+    path: '/',
+    element: <Home />,
+  },
+  {
+    path: '/about',
+    element: <About />,
+  },
+  {
+    path: '/api-demo',
+    element: (
+      <Suspense fallback={'loading...'}>
+        <ApiDemo promise={fetchData()} />
+      </Suspense>
+    ),
+  },
+])
+
+const App = () => {
+  return <RouterProvider router={router} />
+}
+
 export default App

+ 2 - 2
src/server/index.tsx

@@ -10,10 +10,10 @@ app.route('/swagger', swagger)
 
 app.use(renderer)
 
-app.get('/', (c) => {
+app.get('/*', (c) => {
   return c.render(
     <>
-      <h1 className="text-3xl font-bold underline">Hello from SSR232222</h1>
+      <h1 className="text-3xl font-bold underline">Hello from SSR</h1>
       <div id="root"></div>
     </>
   )

+ 1 - 1
src/server/renderer.tsx

@@ -10,7 +10,7 @@ export const renderer = reactRenderer(({ children }) => {
         <Script/>
         <Link href="/src/style.css" rel="stylesheet" />
       </head>
-      <body>{children}{JSON.stringify(import.meta.env)}</body>
+      <body>{children}</body>
     </html>
   )
 })