# JSX
JSX 改变了语法
- 对 IDE 的代码高亮、代码建议、代码重构、代码跳转等功能都有影响,好在 VSCode、WebStorm 都对 JSX 有很好的支持
- JSX 是 Facebook 自己弄的一个规范 (opens new window),这个规范无意并入 ECMAScript,语法是 ES6 的扩充
- JSX 需要编译,今天一般用 Babel 编译
虽然 Template Literials 很适合用于实现 JSX 这种 DSL,优点是可以在运行时实现,无需编译。但 JSX 规范 (opens new window)也指出 Template Literials 存在较大的缺点,即: 需要实现一个完整的 JS 语法 + JSX 语法,工作量大,且和 JS 引擎的工作重复了。
我认为 Template Literials 还有一个缺点 JSX 规范没提到: 无法访问局部变量。这是因为 Template Literials 本质就是个函数而已,如我的理解有误,欢迎指出。
// Template Literals,无法访问 loading 变量
var loading = false;
var box = jsx`
<Box>
{
loading ?
<div>loading...</div> :
<div>Text Content</div>
}
</Box>
`;
// JSX,可以访问 loading 变量
var loading = false;
var box = <Box>
{
loading ?
<div>loading...</div> :
<div>Text Content</div>
}
</Box>;
# 使用 Webpack + Babel 编译 JSX
- 安装 Webpack 5:
npm i -D webpack webpack-cli
- 安装 Babel:
npm i -D @babel/core
- 安装 Babel 的 JSX 插件:
npm i -D @babel/plugin-transform-react-jsx
- 为了能在 Webpack 中使用 Babel,安装:
npm i -D babel-loader
- 在 Webpack 中配置 babel-loader