Hono JSX 是 Hono 框架内置的服务端 HTML 生成渲染器,支持异步组件、Suspense 流式渲染,并与 Hono 的响应系统无缝集成。
主要能力
- 服务端 JSX 渲染
- 异步组件支持
- 基于 Suspense 的流式渲染
- 自动 head 提升
- 错误边界
- Context API
- 零客户端 hydration 开销
适用场景 适合用于:构建服务端渲染的 HTML 页面、创建邮件模板、生成静态 HTML、流式传输大型 HTML 响应、构建多页应用(MPA)。不适用于交互式 SPA(应改用 React/Vue/Svelte)。
配置方式 TypeScript 配置(tsconfig.json): { "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "hono/jsx" } }
也可使用 Pragma 注释: /** @jsx jsx / /* @jsxImportSource hono/jsx */
Deno 配置(deno.json): { "compilerOptions": { "jsx": "react-jsx", "jsxImportSource": "npm:hono/jsx" } }
基本用法 简单渲染:通过 c.html() 返回 JSX。 组件:使用 FC 类型定义函数组件,支持 props 与可选属性。 布局组件:使用 PropsWithChildren 组合页面结构。
异步组件 支持基本异步组件与嵌套异步组件,可在组件内 await 数据后渲染。
流式渲染与 Suspense 使用 hono/jsx/streaming 的 Suspense 与 renderToReadableStream,通过 c.body 返回流,并设置 Content-Type 与 Transfer-Encoding 头。支持多个 Suspense 边界。
错误边界 使用 hono/jsx 的 ErrorBoundary,可捕获同步与异步组件抛出的错误,并通过 fallback 渲染错误信息。
Context API 使用 createContext 与 useContext 在组件树中传递值(如主题)。
Head 提升 title、meta、link、script 等标签会自动提升到 head,即使来自嵌套组件也可生效。
原始 HTML 可使用 dangerouslySetInnerHTML,或使用 hono/html 的 raw 辅助函数插入原始 HTML。
Fragment 与 Memoization 支持 Fragment(含短语法 <>...</>)以及 memo 进行结果记忆化。
集成模式
- 与 HTMX 集成:通过 hx-* 属性实现局部更新。
- 与 Tailwind CSS 集成:在组件中拼接 class。
快速参考 关键导入: import type { FC, PropsWithChildren } from 'hono/jsx' import { Fragment, createContext, useContext, memo } from 'hono/jsx' import { Suspense, renderToReadableStream } from 'hono/jsx/streaming' import { ErrorBoundary } from 'hono/jsx' import { raw } from 'hono/html'
响应方法: 直接渲染:c.html(<Component />) 流式:c.body(renderToReadableStream(<Component />), { headers: { 'Content-Type': 'text/html; charset=UTF-8' } })
组件类型:基本组件、带 props 组件、带 children 组件、异步组件。
相关技能:hono-core(框架基础)、hono-middleware(中间件模式)、hono-cloudflare(边缘部署)。
版本:Hono 4.x;最后更新:2025 年 1 月;许可证:MIT。