# React Renderer Middleware [](https://codecov.io/github/honojs/middleware) React Renderer Middleware allows for the easy creation of a renderer based on React for Hono. ## Installation ```txt npm i @hono/react-renderer react react-dom hono npm i -D @types/react @types/react-dom ``` ## Settings `tsconfig.json`: ```json { "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "react" } } ``` If you are using Vite, add `ssr external` config to `vite.config.ts`: ```typescript import build from '@hono/vite-cloudflare-pages' import devServer from '@hono/vite-dev-server' import adapter from '@hono/vite-dev-server/cloudflare' import { defineConfig } from 'vite' export default defineConfig({ ssr: { external: ['react', 'react-dom'], // <== add }, plugins: [ build(), devServer({ adapter, entry: 'src/index.tsx', }), ], }) ``` ## Usage ### Basic ```tsx import { Hono } from 'hono' import { reactRenderer } from '@hono/react-renderer' const app = new Hono() app.get( '*', reactRenderer(({ children }) => { return (
Welcome!
) }) ``` ### Extending `Props` You can define types of `Props`: ```tsx declare module '@hono/react-renderer' { interface Props { title: string } } ``` Then, you can use it in the `reactRenderer()` function and pass values as a second argument to `c.render()`: ```tsx app.get( '*', reactRenderer(({ children, title }) => { return (Welcome!
, { title: 'Top Page', }) }) ``` ### `useRequestContext()` You can get an instance of `Context` in a function component: ```tsx const Component = () => { const c = useRequestContext() returnYou access {c.req.url}
} app.get('/', (c) => { return c.render(Welcome!
Done!
} throw new Promise((resolve) => { done = true setTimeout(resolve, 1000) }) } app.get('/', (c) => { return c.render(