前言虽然现在接入JSX语法的框架(React、Vue)越来越多,但毫无疑问,与之关系最深的还是React。在2013年React和JSX出来的时候,社区对JSX的争议很大,而现在,越来越多的人不得不对JSX说“真香”!典型的“真香”系列。什么是JSX?根据React官方的解释,JSX是一种JavaScript语法扩展,类似于模板语法,或者说是一种类似于XML的ECMAScript语法扩展,具有JavaScript的所有功能。这个解释可以从两个关键点提炼出来:“JavaScript语法扩展”和“拥有JavaScript的所有功能”。将支持JSX,因为它原生支持JavaScript。这就引出了一个问题“JSX如何在JavaScript中工作?”JSX语法在JavaScript中是如何工作的?React在React框架中,JSX的语法是如何在JavaScript中生效的?React官网给出的解释是,JSX会被编译成React.createElement(),React.createElement()会返回一个名为“ReactElement”的JS对象。JSX的编译由Babel完成。Babel是一个工具链,主要用于将使用ECMAScript2015+语法编写的代码转换为向后兼容的JavaScript语法,以便它可以在当前和旧版本的浏览器或其他环境中运行。当然,Babel也有将JSX转为JS的能力。看一个例子:左边是我们React开发写的语法,里面有一段JSX代码。经过Babel转换后,都变成了JS代码。事实上,如果你仔细观察,你会发现JSX更像是一种语法糖,通过类似于模板语法的描述来描述函数对象。其实JSX语法在React中并不是必须的,我们也可以使用React.createElement函数,比如使用React.createElement函数来写这么一段代码。classTestextendsReact.Component{render(){returnReact.createElement("div",null,React.createElement("div",null,"Hello,",this.props.test),React.createElement("div",null,"今天是个好日子"));}}ReactDOM.render(React.createElement(Test,{test:"baixiaobai"}),document.getElementById("root"));采用JSX后,代码看起来像这样:day.
