《React+Redux前端开发实战》—1.4.2 JSX的转译

举报
华章计算机 发表于 2019/07/24 23:20:29 2019/07/24
【摘要】 本节书摘来自华章计算机《React+Redux前端开发实战》一书中的第1章,第1.4.2节,作者是徐顺发.

1.4.2  JSX的转译

  JSX代码是不能被浏览器直接运行的,需要将其转译为JavaScript之后才能运行。转译之后的代码功能相同。由于前端发展速度较快,在很多老项目中依旧可以见到这类写法。这也是本节对JSX编译工具发展作一个简单介绍的初衷,初次学习React的读者暂时可以当成小故事去阅读。下面来看一看对JSX转译的一段小“历史”。

  早期Facebook提供了一个简单的工具JSXTransformer,这是一个浏览器端具有转译功能的脚本,将这个JSXTransformer.js文件直接引入HTML文档就能使用。例如:

  

  <script src="./jsxtransformer.js"></script>

  // type为text/jsx

  <script type="text/jsx">

   // JSX代码

  </script>

  

  这样写就需要在浏览器端进行转译工作,所以对性能有损耗,影响效率。当然Facebook也考虑到了这点,于是对应的也就有了服务端去渲染的工具,那就是react-tools。这里暂不介绍,读者先大致了解下即可。

  随后在React v 0.14之后官方发布:

  Deprecation of react-tools

  The react-tools package and JSXTransformer.js browser file have been deprecated. You can continue using version 0.13.3 of both, but we no longer support them and recommend migrating to Babel, which has built-in support for React and JSX.

  也就是说,在React v0.14版本后将JSXTransformer.js弃用了。接下去可以使用Babel,如图1.7所示,这也是当下主流使用的转译工具。

 image.png

图1.7  Babel界面

  Babel原名是6to5,是一个开源的转译工具。它的作用就是把当前项目中使用的ES 6、ES 7和JSX等语法,转译为当下可以执行的JavaScript版本,让浏览器能够识别。简单来说,它是一个转码工具集,包含各种各样的插件。

  在Babel 6.0版本以前,使用了browser.js,也就是最早替代JSXTransform.js的转化器脚本。在HTML中引用如下:

  

  <script src="./babel-core/browser.js"></script>

  // type为text/babel

  <script type="text/babel">

   // JSX代码

  </script>

注意:在Babel 6.0之后就不再提供browser.js了,当然老项目中依旧可以这样使用。不过这种写法在大型项目中通常不会使用,毕竟在浏览器中隔了一道转译层。如果只是想做一个本地的小demo,还是可以直接引用在浏览器端做转译的。

  Babel还提供了在线编译的功能(http://babeljs.io/repl/),如图1.8所示,可以在上面进行测试或学习。

 image.png

图1.8  Babel在线编译界面

  以上就是JSX转译的大致历程。

  本书之后的项目,将使用Webpack等构建工具配置Babel,以实现对JSX语法的支持。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。