美文网首页
iOS 开发学 React 系列:JSX 与 语法糖

iOS 开发学 React 系列:JSX 与 语法糖

作者: felix9 | 来源:发表于2019-12-01 15:08 被阅读0次

导语

前段时间因为工作缘故,从 iOS 开发转为了前端开发,一上来就接触了 React 。尽管我们常常说大前端,但实际上前端开发和客户端开发在很多理念上是不一样的。尽管在网上有很多文章介绍React(如阮一峰的系列课程),官方文档也写得很详细,但是由于理念上的差异导致理解这些内容还是有一些门槛的。我尝试分享着我在 React 学习过程的思考,希望能够帮助大家。

阅读说明

在开始阅读这篇文章前,我会假设,你已经有 JS (ES6) 基础和 HTML 基础。并且本文不是对 React 的详细教程,而是对 React 一些不太好理解的部分分享自己的思考,这便要求读者最好通过官方文档对 React 有个简单的认知。

JSX

下面这个例子是React 的最基本用法,用于将模板转为 HTML 语言,并插入指定的 DOM 节点。

ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('example')
);

在这小段代码中,我们看到一个有趣的标签语法<h1>Hello, world!</h1>。这个标签语法既不是字符串也不是 HTML,React 团队将其称为 JSX,它是 JavaScript 的语法扩展。通过 JSX,React 可以更容易的在代码中描述 UI。JSX不仅仅可以用来描述UI,同时也可以混杂 JS 的逻辑。如:

const target = 'world'
ReactDOM.render(
  <h1>Hello, {target}!</h1>,
  document.getElementById('example')
);

这段代码的作用和上一段代码的作用一样,但是其中包含了动态的逻辑而不是固定的。JSX 的基本语法规则是:遇到 HTML 标签(以 < 开头),就用 HTML 规则解析;遇到代码块(以 { 开头),就用 JavaScript 规则解析。

语法糖

讲到这里,我们对 JSX 有了简单的了解,但是有过 JS 基础的朋友就会纳闷,JS 本身并不支持 JSX 的语法,JSX 是怎么做到对 JSX 文件的解析。在解释这个问题之前,我们需要先了解一个概念——语法糖。简单的说,语法糖就是一种便捷写法。例如:

input.map(item => item + 1);
input.map(function (item) {
  return item + 1;
});

上面的代码中,前一句代码就是后一句代码的语法糖形式。而对于JSX,便仅仅只是React.createElement(component, props, ...children)函数的语法糖。如下 JSX 代码:

<MyButton color="blue" shadowSize={2}>
  Click Me
</MyButton>

实际是:

React.createElement(
  MyButton,
  {color: 'blue', shadowSize: 2},
  'Click Me'
)

当然,这个依然无法解释我们的疑问,React 是如何实现对 JSX 的支持转换。通常来说,我们会说 JS 是解释型语言,典型特征是 JS 无需编译即可运行。但是对 JSX 却不是这样的了。如果你尝试过在本地保存运行一次 React 的代码,仔细看一下终端的输出会发现有一个编译的过程。实际上,通常 React 应用使用 Babel 编译器将 JSX 的代码转化为浏览器能够理解使用的 J S代码。这个过程和C、C++编译器将代码转换为机器码类似,只不过它的目标是将其转换为浏览器能理解的 JS 代码。
这种创造语法并编写一个编译器来支持它的做法在客户端很很罕见,然而在前端中却是常见的做法。除了 JSX,还有微软推出的 TypeScript ,其实也是在 JS 上的一种语法糖,只不过他的语法比 JSX 要复杂的多,但为动态类型的 JS 补齐了类型判断等特性,极大提高了前端的开发效率。

相关文章

  • iOS 开发学 React 系列:JSX 与 语法糖

    导语 前段时间因为工作缘故,从 iOS 开发转为了前端开发,一上来就接触了 React 。尽管我们常常说大前端,但...

  • JSX本质

    JSX语法 1.jsx其实是语法糖 2.开发环境会将jsx编译成js代码 3.JSX是React引入的,但不是Re...

  • React 最基础的JSX语法

    JSX 是Facebook为React开发的一套语法糖,创建JSX 语法的本质目的是为了使用基于 xml 的方式表...

  • React个人笔记

    JSX时createElement()方法的语法糖,jsx语法被@babel/preset-react插件编译为c...

  • React官网随记

    JSX jsx,一种js的语法扩展,React.createElement方法的语法糖。 在jsx中可嵌入任何表达...

  • React 深入 JSX(10)

    JSX JSX 其实是 React.createElelment 函数调用的语法糖 JSX 会将代码编译成 Rea...

  • react语法结构

    1.react JSX语法原理 react是函数式编程,使用jsx语法来渲染组件。jsx语法是合法的JavaScr...

  • JSX的本质

    先看一下JSX的常见写法 JSX是语法糖,通过babel转成React.createElement函数,在babe...

  • JSX语法

    在react中,在js文件里写html标签,我们把这种语法称为 jsx语法。 jsx语法与普通js语法的区别 普通...

  • [react]4、JSX的本质

    1、React.createElement语法糖 在babel编译器下,所有的jsx最终会转换成React.cre...

网友评论

      本文标题:iOS 开发学 React 系列:JSX 与 语法糖

      本文链接:https://www.haomeiwen.com/subject/abbzwctx.html