# 使用 React 实现 SSR > 在 Nitro 中使用 Vite 进行 React 的服务端渲染。 ```json [package.json] { "type": "module", "scripts": { "build": "vite build", "preview": "vite preview", "dev": "vite dev" }, "devDependencies": { "@types/react": "^19.2.13", "@types/react-dom": "^19.2.3", "@vitejs/plugin-react": "^5.1.3", "nitro": "latest", "react": "^19.2.4", "react-dom": "^19.2.4", "react-refresh": "^0.18.0", "vite": "beta" } } ``` ```json [tsconfig.json] { "extends": "nitro/tsconfig", "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "react" } } ``` ```js [vite.config.mjs] import { defineConfig } from "vite"; import { nitro } from "nitro/vite"; import react from "@vitejs/plugin-react"; export default defineConfig({ plugins: [nitro(), react()], environments: { client: { build: { rollupOptions: { input: "./src/entry-client.tsx" } }, }, }, }); ``` ```tsx [src/app.tsx] import { useState } from "react"; export function App() { const [count, setCount] = useState(0); return ( <>

Nitro + Vite + React

); } ``` ```tsx [src/entry-client.tsx] import "@vitejs/plugin-react/preamble"; import { hydrateRoot } from "react-dom/client"; import { App } from "./app.tsx"; hydrateRoot(document.querySelector("#app")!, ); ``` ```tsx [src/entry-server.tsx] import "./styles.css"; import { renderToReadableStream } from "react-dom/server.edge"; import { App } from "./app.tsx"; import clientAssets from "./entry-client?assets=client"; import serverAssets from "./entry-server?assets=ssr"; export default { async fetch(_req: Request) { const assets = clientAssets.merge(serverAssets); return new Response( await renderToReadableStream( {assets.css.map((attr: any) => ( ))} {assets.js.map((attr: any) => ( ))}