JSX到JavaScript的转换

本文介绍了JSX在React中的使用,它允许开发者在JS文件中编写类似HTML的结构。JSX实际上是语法糖,最终会被转换为JavaScript。通过Babel的repl环境,我们可以观察到JSX转换后代码的形式,其中标签转换为方法调用,属性以对象形式传递,子元素通过参数递归定义。自定义组件需首字母大写,否则会被视为原生标签。

可能初次接触React的人会惊讶于为什么可以在JS文件中写HTML的语句,例如return <div>hello</div>

其实这种语法就是JSX,它实际上是一种语法糖。我们想“All-in-JS”,但是无奈HTML那样的标签语法更适合表示界面的结构与层次,于是人们便想出了JSX这种方法,即在JS中写标签,但是实际上最终编译时又会被转换为JavaScript。

那么,被转换成的JavaScript代码是怎样的呢?我们可以通过Babel提供的repl环境一探究竟。
在这里插入图片描述

从上图可以看出,从JSX转换为的JavaScript代码,有点像document.createElement方法,第一个参数都是所要创建的元素的tag值。

第二个参数就是我们传给元素的props值了,在生成的JS代码中,是以一个普通对象,以键值对的方式存在

这个时候我们可以往div标签中再嵌入一个span标签看看会生成怎样的代码。

在这里插入图片描述

可以看出,新嵌入的标签转换为JavaScript后变成了第三个参数,同时这个参数也是递归定义的。

如果我们往div标签内嵌入多个标签,结果就是参数会相应的增加。React.createElement内,会把从第三个参数开始的之后所有参数放进一个数组,然后作为父元素的children来处理


学习React的时候都知道,若要使用自己定义的组件必须首字母大写,至于原因我们也能从转换后的JavaScript代码中看出。

在这里插入图片描述

我首先定义了一个Foo组件并将其嵌入div标签中,可以看见Foo组件所对应的React.createElement方法的第一个参数不是一个字符串而是Foo组件本身

若我将Foo改成foo,则第一个参数会变回字符串"foo"。

目前的Babel是将首字母是否是大写作为判断自定义组件的依据。大写的就是自定义组件,小写的则是原生标签

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值