今日讲讲JSX

简介: 今日讲讲JSX

为什么要用 JSX?不用会有什么后果?


JSX 语法糖允许前端开发者使用我们最为熟悉的类 HTML 标签语法来创建虚拟 DOM,在降低学习成本的同时,也提升了研发效率与研发体验。


JSX 背后的功能模块是什么,这个功能模块都做了哪些事情?        


JSX 背后的功能模块是React.createElement,该函数并没有做很多复杂的事情,基本上是在进行格式化数据的操作,执行到最后会 return 一个针对 ReactElement 的调用。


JSX 的本质是什么,它和 JS 之间到底是什么关系?


JSX 的本质其实是React.createElement这个 JavaScript 调用的语法糖


这个描述的意思是使用JSX语法可以扩展JavaScript 的功能:在JavaScript 中可以像写HTML一样来构建UI(原生JS是不具备这种能力的),但编译后最终其实还是纯JS代码。JSX 的定位是 JavaScript 的“扩展”,而非 JavaScript 的“某个版本”,所以浏览器并不会像天然支持 JavaScript 一样地支持 JSX。要使JSX在JavaScript中生效,我们需要借助Babel(Babel 是一个工具链,主要用于将 ECMAScript 2015+ 版本的代码转换为向后兼容的 JavaScript 语法,以便能够运行在当前和旧版本的浏览器或其他环境中。类似的,Babel 也具备将 JSX 语法转换为 JavaScript 代码的能力。)进行编译:JSX 会被编译为 React.createElement(), React.createElement() 将返回一个叫作“React Element”的 JS 对象。


如下一个Babel编译的例子:


可以看到,所有的 JSX 标签都被转化成了 React.createElement 调用,这也就意味着,我们写的 JSX 其实写的就是 React.createElement。


这里我们可以得出结论:JSX 的本质其实是React.createElement这个 JavaScript 调用的语法糖

相关文章
|
容器
.NET Core - Autofac增强容器能力
.NET Core - Autofac增强容器能力
|
12月前
|
消息中间件 分布式计算 大数据
大数据-121 - Flink Time Watermark 详解 附带示例详解
大数据-121 - Flink Time Watermark 详解 附带示例详解
199 0
|
11月前
|
JavaScript
componentDidUpdate 方法在组件更新后做什么?
【10月更文挑战第27天】在 `componentDidUpdate` 中使用 `this.props` 和 `this.state` 时要小心,因为此时它们已经是更新后的最新值,与 `prevProps` 和 `prevState` 所代表的前一个状态不同。同时,如果在 `componentDidUpdate` 中再次调用 `setState`,要确保不会导致无限循环的更新,通常需要添加适当的条件判断来避免不必要的状态更新。
279 2
|
11月前
|
缓存 JavaScript 前端开发
减少回流和重绘的发生
【10月更文挑战第24天】通过综合运用这些方法,可以有效地减少回流和重绘的发生,提高页面的性能和响应速度,为用户带来更好的体验。
|
应用服务中间件 nginx
Ngnix08源码的复杂安装, --prefix=PATH可以设置一些相关的路径,对./configure进行进行编译设置,--sbin-path=PATH可以启动文件,或者相make clean清屏
Ngnix08源码的复杂安装, --prefix=PATH可以设置一些相关的路径,对./configure进行进行编译设置,--sbin-path=PATH可以启动文件,或者相make clean清屏
|
移动开发 JavaScript 应用服务中间件
终结同源策略!轻松实现跨域访问的9种方式!
终结同源策略!轻松实现跨域访问的9种方式!
|
存储 缓存 JavaScript
|
JavaScript
数据双向 双向数据绑定
数据双向 双向数据绑定
170 0
|
存储 Java 开发者
Spring Boot中的yaml配置简介
Spring Boot中的yaml配置简介
|
前端开发 容器
css的这些内容你可能知道,但是又不完全知道(一)(下)
css的这些内容你可能知道,但是又不完全知道(一)