Tera 和 React

Tera 和 React 不是同一类技术,它们的目标和应用场景完全不同。

简单来说:Tera 是在服务器端把“数据”填入“HTML模板”生成完整页面的工具,而 React 是在浏览器里动态创建和更新界面的组件库


🔧 Tera:后端模板引擎

Tera 是一个运行在 Rust 服务端 的模板引擎,它的工作方式是:

  1. 预先写好 HTML 模板文件,在模板中预留变量位置和简单的逻辑(如循环、条件判断)
  2. 后端代码准备好数据,传给 Tera
  3. Tera 在服务器上把数据和模板合并,生成一个完整的 HTML 字符串
  4. 把这个完整的 HTML 直接发给浏览器

<!-- Tera 模板示例 -->
<h1>欢迎, {{ user_name }}!</h1>

<ul>
{% for product in products %}
  <li>{{ product.name }} - ¥{{ product.price }}</li>
{% endfor %}
</ul>

渲染后,浏览器收到的是已经填充好的完整 HTML 。

Tera 的语法灵感来自 Jinja2(Python)和 Django 模板,核心特点包括模板继承、过滤器、宏等 。

特性说明
运行位置服务器端 (Rust)
输出内容完整的 HTML 字符串
主要用途服务端渲染 (SSR) 页面
交互能力无,页面一旦发送就固定了

⚛️ React:前端 UI 组件库

React 是一个运行在 浏览器 中的 JavaScript 库,它的工作方式是 :

  1. 开发者编写组件,组件内部混合了 HTML 标签和 JavaScript 逻辑
  2. 浏览器加载 JS 代码后,React 在用户浏览器里动态创建和更新 DOM 元素
  3. 当数据变化时,React 只更新需要改变的那部分界面,而不是刷新整个页面

// React 组件示例
function Welcome() {
  const [user, setUser] = useState(null);
  
  return (
    <div>
      <h1>欢迎, {user?.name || "游客"}!</h1>
      <button onClick={() => fetchUser()}>登录</button>
    </div>
  );
}

React 使用 JSX 语法(在 JavaScript 中写类似 HTML 的代码),组件可以被组合、嵌套、复用 。

特性说明
运行位置浏览器 (客户端)
输出内容动态操作的 DOM 元素
主要用途构建交互式用户界面
交互能力强,可响应用户操作实时更新

📊 核心区别一览

对比维度TeraReact
定位模板引擎UI 组件库
运行环境Rust 服务端浏览器 (JavaScript)
核心任务字符串替换,生成 HTML动态创建/更新 DOM
是否可交互❌ 页面静态✅ 高度动态
数据更新时需刷新整个页面局部更新,不刷新页面
学习曲线低(类似写 HTML)较高(需理解组件、状态、JSX)

🔗 它们能一起用吗?

可以,而且是一种常见的架构模式。

虽然 Tera 和 React 是两种不同时代的渲染方式,但在 Rust + Axum + Tera 的架构中,你可以混合使用

  • 普通页面(如博客文章、产品列表):用 Tera 在服务端渲染,速度快、对 SEO 友好
  • 需要交互的模块(如购物车、评论组件):在 Tera 渲染的页面中嵌入一个 <div id="app"></div>,然后用 React 接管这个区域

这种模式被称为 "微前端""渐进式增强"——用 Tera 搞定绝大多数静态内容,只在必要时引入 React。Pebble CMS 本身就支持这种混合架构,你可以用它生成大部分页面,同时在需要复杂交互的地方嵌入 React 组件。


💡 总结

你的问题答案
Tera 能实现 React 的功能吗?不能。Tera 无法实现任何客户端交互。
它们互斥吗?不互斥,可以配合使用。
什么时候用 Tera?内容为主的页面、博客、SEO 要求高的场景。
什么时候用 React?需要复杂交互、实时更新的应用(如管理后台、电商购物车)。

如果你正在考虑 Pebble CMS 的技术选型,可以这样决策:内容展示用 Tera,交互模块用 React,两者各司其职。