全栈React: 第2天 什么是 JSX?

全栈React: 第2天 什么是 JSX?

本文转载自:众成翻译
译者:iOSDevLog
链接:http://www.zcfy.cc/article/3797
原文:https://www.fullstackreact.com/30-days-of-react/day-2/

现在我们知道React是什么,让我们来看看这个系列的其余部分将会出现的几个术语和概念。

在我们前面的文章中,我们看了一下[React](https://facebook.github.io/react/),并在高级别上讨论了它的工作原理。 在本文中,我们将介绍React生态系统的一部分:ES6和JSX。

## JSX/ES5/ES6 什么鬼东西??!

在互联网上的任何粗略的搜索寻找React材料,毫无疑问,你已经遇到了术语JSX,ES5和ES6。这些难懂的首字母缩略词可能会很快混乱。

ES5(ES 代表ECMAScript)基本上是“常规JavaScript”。第5次更新JavaScript,ES5在2009年完成。它已被所有主要浏览器支持多年。因此,如果你在最近写过或看过任何JavaScript,很可能是ES5。

ES6是一个新版本的JavaScript,添加了一些不错的语法和功能添加。它在2015年完成。ES6 几乎完全支持 所有主要的浏览器。但这将是一段时间,直到较旧版本的Web浏览器逐步停止使用。例如,Internet Explorer 11不支持ES6,但是具有大约12%的浏览器市场份额。

为了获得ES6的好处今天,我们必须做一些事情,使它工作在尽可能多的浏览器,我们可以:

  1. 我们必须 转换 我们的代码,以便更广泛的浏览器了解我们的JavaScript。这意味着将ES6 JavaScript转换为ES5 JavaScript。

  2. We have to include a shim or polyfill that provides additional functionality added in ES6 that a browser may or may not have.

  3. 我们必须包括一个垫片或polyfill,提供在ES6中添加的浏览器可能具有或可能没有的附加功能。

我们将在本系列的稍后部分看到我们如何做到这一点。

我们将在本系列中编写的大多数代码都可以轻松地转换为ES5。在我们使用ES6的情况下,我们将首先介绍功能,然后通过它。

我们将看到,所有的React组件都有一个render函数,它指定了React组件的HTML输出。JavaScript eXtension,或更常见的JSX,是一个React扩展,允许我们编写看起来像 HTML的JavaScript 。

尽管在以前的范例中,将JavaScript和标记包含在同一个地方被认为是一种不好的习惯,但是结果是将视图与功能相结合使得对视图的推理变得非常简单。

看看这是什么意思,想象一下,我们有一个React组件来呈现一个h1 HTML标签。JSX允许我们以非常类似于HTML的方式声明这个元素:

class Header extends React.Component {
  render() {
    return (
      <h1 className='large'>Hello World</h1>
    );
  }
}

这个HelloWorld组件中的render()函数看起来像它的返回HTML,但其实这是JSX。JSX 在运行时被翻译成常规JavaScript。那个组件,翻译后,看起来像这样:

class HelloWorld extends React.Component {
  render() {
    return (
      React.createElement(
        'h1',
        {className: 'large'},
        'Hello World'
      )
    );
  }
}

虽然JSX看起来像HTML,但它实际上只是一种更灵敏的方式React.createElement()来编写声明。当组件渲染时,它输出一个React元素树或该组件输出的HTML元素的虚拟表示。React然后将基于此React元素表示来确定对实际DOM所做的更改。在HelloWorld组件的情况下,React写入DOM的HTML将如下所示:

<h1 class='large'>Hello World</h1>

class extends我们在第一个作出反应组件使用的语法是ES6语法。它允许我们使用熟悉的面向对象样式编写对象。
在ES6中,class 语法可能翻译为:

> var HelloWorld = function() {}
> Object.extends(HelloWorld, React.Component)
> HelloWorld.prototype.render = function() {} 
>

因为JSX是JavaScript,我们不能使用JavaScript保留字。这包括class和像for

React提供了我们的属性className。我们使用它在HelloWorld来设置我们的h1标签上的large 类。还有一些其他属性,如标签上的属性for为转换htmlFor ,因为for 也是保留字。当我们开始使用它们时,我们将看看这些。

如果我们想要编写纯JavaScript而不是依赖于JSX编译器,我们可以只写该React.createElement()函数,而不必担心抽象层。但我们喜欢JSX。它特别是更复杂的组件可读性。考虑下面的JSX:

<div>
  ![](profile.jpg)
  <h1>Welcome back Ari</h1>
</div>

传送到浏览器的JavaScript看起来像这样:

React.createElement("div", null, 
  React.createElement("img", {src: "profile.jpg", alt: "Profile photo"}),
  React.createElement("h1", null, "Welcome back Ari")
);

再提一下,虽然你可以跳过JSX并直接编写后者,但JSX语法非常适合表示嵌套的HTML元素。

现在我们了解JSX,我们可以开始编写我们的第一个React组件。明天加入我们,当我们跳进我们的第一个React应用程序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,233评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,013评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,030评论 0 241
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,827评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,221评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,542评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,814评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,513评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,225评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,497评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,998评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,342评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,986评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,055评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,812评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,560评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,461评论 2 266

推荐阅读更多精彩内容