JSX 语法大多是在学习 React 的时候,React 将 JSX 的能力发扬光大[3]。但 JSX 不等于 React,也不是由 React 创造的。
JSX 作为标签语法既不是字符串也不是 HTML,是一个 JavaScript 的语法扩展,可以很好地描述 UI 应该呈现出它应有交互的本质形式。JSX 会使人联想到模版语言,它也具有 JavaScript 的全部功能。下面我们自己写一个 babel plugin,来获得所需要对 JSX 的解释权。
1 JSX Babel Plugin
我们知道,HTML是描述 Web 页面的语言,axml 或 vxml 是描述小程序页面的语言,不同的容器两者并不兼容。但相同点是,他们都基于 JavaScript 技术栈,那么是否可以通过定义一套 JSX 规范来生成出一样的页面表现?
2 目标
目前的疑惑在于:AST 仅可用作 JavaScript 的转换,那 HTML 和 axml 等文本标记语言改怎么转换呢?不妨转换一种思路:将上述的 JSX 代码转化为 JS 的代码,在 Web 端和小程序端提供组件消费即可。这是 AST 开发的一个设计思想,AST 工具仅做代码的编译,具体的消费由下层操作,@babel/preset-react 与 react 就是这个模式。