闽公网安备 35020302035485号
React 19 集成:兼容 Owner Stacks 和 useEffectEvent,提升动态渲染性能。
| 组件名称 | 描述 | 关键 Props | 示例代码 |
|---|---|---|---|
| Html | 邮件的根元素,包装整个模板,支持 lang 属性。 | lang (string, 默认 'en') |
tsx<br>import { Html } from '@react-email/components';<br><Html lang="zh-CN">内容</Html><br> 注释:设置语言以优化国际化。 |
| Head | 邮件头部,包含 meta 标签和标题。 | children (ReactNode) |
tsx<br><Head><br> <title>欢迎邮件</title><br></Head><br> 注释:用于 SEO 和客户端渲染提示。 |
| Body | 邮件主体容器,确保居中和响应式。 | style (CSSProperties) |
tsx<br><Body style={{ backgroundColor: '#ffffff' }}><br> 主体内容<br></Body><br> 注释:默认宽度 600px,适配移动端。 |
| Preview | 邮件预览文本,显示在收件箱中。 | children (string) |
tsx<br><Preview>新功能更新!</Preview><br> 注释:限制 100 字符,提升打开率。 |
| Container | 内容容器,提供最大宽度和内边距。 | style (CSSProperties) |
tsx<br><Container style={{ width: '600px' }}><br> 容器内容<br></Container><br> 注释:默认 padding: 20px。 |
| Section | 部分容器,使用表格实现块级布局。 | style (CSSProperties) |
tsx<br><Section style={{ padding: '20px' }}><br> 部分内容<br></Section><br> 注释:支持垂直堆叠,兼容旧客户端。 |
| Row | 行容器,用于水平排列元素。 | style (CSSProperties) |
tsx<br><Row style={{ display: 'table-row' }}><br> 行内容<br></Row><br> 注释:结合 Column 使用,实现网格。 |
| Column | 列容器,支持响应式列宽。 | style (CSSProperties), width (string) |
tsx<br><Column width="50%"><br> 列内容<br></Column><br> 注释:百分比宽度确保兼容。 |
| Text | 文本元素,支持段落和样式。 | style (CSSProperties) |
tsx<br><Text style={{ fontSize: '16px' }}>Hello World</Text><br> 注释:默认 sans-serif 字体。 |
| Heading | 标题元素,h1-h6 变体。 | as ('h1'|'h2' 等), style |
tsx<br><Heading as="h1">大标题</Heading><br> 注释:语义化,提升可访问性。 |
| Link | 超链接,支持 href 和样式。 | href (string), style |
tsx<br><Link href="https://example.com">链接</Link><br> 注释:自动内联,避免外部 CSS。 |
| Button | 按钮组件,带 hover 效果。 | href (string), style |
tsx<br><Button href="/"><br> 点击我<br></Button><br> 注释:默认蓝色背景,圆角。 |
| Img | 图片元素,支持 alt 和尺寸。 | src (string), alt (string), width |
tsx<br><Img src="logo.png" alt="Logo" width={200} /><br> 注释:确保 alt 以防图片禁用。 |
| Hr | 水平分隔线。 | style (CSSProperties) |
tsx<br><Hr style={{ borderTop: '1px solid #ccc' }} /><br> 注释:简单分隔,兼容所有客户端。 |
| Tailwind | Tailwind CSS 包装器,启用实用类。 | children (ReactNode) |
tsx<br><Tailwind><br> <div className="p-4 bg-blue-500">内容</div><br></Tailwind><br> 注释:需安装 @react-email/tailwind。 |
# 创建项目 npx create-react-email@latest my-email-app cd my-email-app npm install @react-email/components @react-email/render react@19 react-dom@19若使用 Tailwind CSS,额外配置:
npm install tailwindcss @react-email/tailwind --save
npx tailwindcss init
tailwind.config.js 需适配邮件开发:
/** @type {import('tailwindcss').Config} */
module.exports = {
content: ['./src/**/*.{js,jsx,ts,tsx}'],
plugins: [require('@react-email/tailwind')],
corePlugins: { preflight: false }, // 禁用不兼容的 Tailwind 功能
};
下面使用 React Email 的 <Section> 和 <Button>实现一个简单的邮件组件示例:// WelcomeEmail.tsx
import { Section, Button, Text, Html } from '@react-email/components';
import * as React from 'react';
interface WelcomeEmailProps {
userName: string;
}
const WelcomeEmail: React.FC<WelcomeEmailProps> = ({ userName }) => {
return (
<Html>
<Section style={{ backgroundColor: '#f4f4f5', padding: '20px' }}>
<Text style={{ fontSize: '24px', fontWeight: 'bold' }}>
Welcome, {userName}!
</Text>
<Text style={{ color: '#4b5563' }}>
Thanks for joining our community. Get started now!
</Text>
<Button
href="https://example.com"
style={{ backgroundColor: '#2563eb', color: '#ffffff', padding: '12px 24px', borderRadius: '4px' }}
>
Start Exploring
</Button>
</Section>
</Html>
);
};
export default WelcomeEmail;
<Section> 和 <Button> 是 React Email 的无样式组件,自动编译为表格布局。示例中使用内联样式确保邮件客户端兼容性。同时引入 TypeScript 来保证类型安全。我们可以使用 @react-email/render 将组件转为 HTML:// 堆代码 duidaima.com
// renderEmail.tsx
import { render } from '@react-email/render';
import WelcomeEmail from './emails/WelcomeEmail';
const html = render(<WelcomeEmail userName="Alice" />, { pretty: true });
console.log(html);
最后,React Email 作为下一代无样式组件集合,彻底革新了电子邮件开发。它的 React 组件化、无样式灵活性和 TypeScript 支持,让中级开发者能够快速构建精美、兼容性强的邮件模板。