react-email(@json-render/react-email)是一个 React Email 渲染器,用于把 JSON 规格转换成 HTML 或纯文本邮件输出。它基于 @react-email/components 与 @react-email/render,属于 json-render 生态的邮件渲染方向。
【用途】 把 json-render 的 JSON 规格(spec)渲染成可用于邮件的 HTML 字符串或纯文本字符串,适合在服务端生成邮件内容,也可在浏览器中用于预览。
【主要能力】
- 服务端渲染 API:renderToHtml(spec, options?) 将规格渲染为 HTML 邮件字符串;renderToPlainText(spec, options?) 将规格渲染为纯文本邮件字符串。RenderOptions 包括 registry、includeStandard(默认 true)、state(用于 $state / $cond)。
- 可见性与状态:支持 visible 条件、$state、$cond、repeat(repeat.statePath)、带 { "$item": "field" } 的嵌套 repeat 路径,以及与 @json-render/react 相同的表达式语法;服务端渲染时可在 RenderOptions 中传入 state,使表达式得以解析。
- 目录与注册表:通过 defineCatalog(schema, { components, actions }) 构建 catalog,可用 standardComponentDefinitions 及自定义组件(以 Zod 定义 props、slots、description);通过 defineRegistry(catalog, { components }) 创建类型安全的组件注册表。
- 浏览器渲染:提供 Renderer(在浏览器中渲染规格,例如用于预览,配合 JSONUIProvider 处理 state/actions)与 createRenderer(带 state/actions/validation 的独立渲染器组件)。
- 服务端安全导入:可从 @json-render/react-email/server 导入 schema 与 standardComponentDefinitions,无需引入 React 或 @react-email/components。
【规格结构(元素树)】 与 @json-render/react 相同的扁平元素树:包含 root 键与 elements 映射。根节点必须是 Html;Html 的子节点应为 Head 与 Body。在 Body 内使用 Container(例如 max-width 600px)以实现客户端安全的布局。
【主要导出】 defineRegistry:从 catalog 创建类型安全的组件注册表;Renderer:在浏览器中渲染规格;createRenderer:带 state/actions/validation 的独立渲染器组件;renderToHtml:服务端将规格转为 HTML 字符串;renderToPlainText:服务端将规格转为纯文本字符串;schema:邮件元素 schema;standardComponents:预构建的组件实现;standardComponentDefinitions:catalog 定义(Zod props)。
【子路径导出】 @json-render/react-email:完整包;@json-render/react-email/server:仅 schema 与 catalog(不含 React);@json-render/react-email/catalog:标准组件定义与类型;@json-render/react-email/render:仅渲染函数。
【标准组件】 所有组件都接受 style prop(对象)用于内联样式;为兼容邮件客户端,应使用内联样式,避免外部 CSS。
- 文档结构:Html(根包装,含 lang、dir,子节点为 Head、Body)、Head(邮件 head 区)、Body(body 包装,可用 style 设置背景)。
- 布局:Container(限制宽度,例如 max-width 600px)、Section(分组内容,基于表格以提升兼容性)、Row(水平行)、Column(Row 中的列,通过 style 设置宽度)。
- 内容:Heading(标题文本,可作为 h1–h6)、Text(正文文本)、Link(超链接,含 text、href)、Button(样式为按钮的 CTA 链接,含 text、href)、Image(通过 URL 展示图片,含 src、alt、width、height)、Hr(水平分隔线)。
- 工具:Preview(收件箱预览文本,位于 Html 内)、Markdown(将 Markdown 内容转为邮件安全 HTML)。
【使用方式(快速开始)】 可从 @json-render/react-email 导入 renderToHtml、schema、standardComponentDefinitions,从 @json-render/core 导入 defineCatalog,定义 catalog,构造 spec(root 加 elements 的扁平元素树),然后执行 const html = await renderToHtml(spec)。 自定义组件示例:从 @json-render/react-email 导入 schema、defineRegistry、renderToHtml,从 @json-render/react-email/catalog 导入 standardComponentDefinitions,从 @react-email/components 导入 Container、Heading、Text,从 zod 导入 z;定义带 Alert 组件的 catalog,并通过 defineRegistry 注册 Alert 实现,然后调用 renderToHtml(spec, { registry })。
【邮件最佳实践】 保持宽度受约束(例如 Container 的 max-width 为 600px);使用内联样式或 React Email 的 style props,因为许多客户端会剥离 <style> 块;优先使用基于表格的布局(Section、Row、Column)以获得更广泛的客户端支持;图片使用绝对 URL,因为许多客户端在某些情境下会阻止相对引用或 cid: 引用;在多个客户端(Gmail、Outlook、Apple Mail)中测试,必要时使用预览工具或类似 Litmus 的服务。
【限制】 资料未提供该工具的收费、价格、平台或效果信息;未提供安装命令;未提供除上述邮件客户端兼容性说明之外的更多限制说明。