模板引擎与JSX不等价:前者是运行时/构建时将字符串模板编译为HTML生成函数的通用工具,后者是React中需编译为虚拟DOM创建函数的JS语法糖,二者执行时机、产物及逻辑能力均不同。
JavaScript 中的模板引擎和 JSX 并不等价,也不属于同一类工具:模板引擎是运行时(或构建时)将字符串模板 + 数据渲染为 HTML 的通用机制;JSX 是 React 生态中一种语法扩展,本质是 JavaScript 的语法糖,最终会被编译成普通 JS 函数调用(如 React.createElement)。二者目标相似(生成 UI),但设计定位、执行时机和底层原理不同。
模板引擎(如 Handlebars、EJS、Mustache、Liquid)核心流程是:
{{name}}、)或逻辑指令(如 {{#if}}...)的字符串,将其转换为抽象语法树(AST)或中间指令序列。innerHTML、document.write 或手动 DOM 操作插入页面。例如 EJS: → 编译为 Hello
function(data) { return "Hello " + data.name + "
"; }
JSX 本身不能被浏览器直接执行。
它必须经过编译器(如 Babel 或 TypeScript)处理:
{msg} 会被编译为 React.createElement("div", {className: "box"}, React.createElement("span", null, msg))。你可以在非 React 项目中用 EJS 渲染服务端 HTML;也可以在 React 项目中用 Handlebars 做邮件模板——因为它们面向不同场景。JSX 是 React 组件系统的声明式 UI 表达方式,而模板引擎是通用的字符串填充工具。React 官方明确不推荐在组件中拼接 HTML 字符串(如用 innerHTML + 模板引擎),既破坏 React 的响应式模型,也带来 XSS 风险。