React(二)—— JSX
栏目: JavaScript · 发布时间: 6年前
内容简介:在上一篇文章中,我们研究了 React 是什么,并在高层讨论它是如何工作的。在本文中,我们将讨论 React 生态系统的一部分:ES6 和 JSX。在网上对 React 的搜索中,你一定已经遇到了ES5(ES 代表 ECMAScript)基本上是“常规 JavaScript”。JavaScript 的第五次更新,ES5 于2009年完成。多年来,它一直受到所有主流浏览器的支持。因此,如果你最近编写或看过JavaScript,那么很可能是ES5。
在上一篇文章中,我们研究了 React 是什么,并在高层讨论它是如何工作的。在本文中,我们将讨论 React 生态系统的一部分:ES6 和 JSX。
JSX/ES5/ES6 WTF??!
在网上对 React 的搜索中,你一定已经遇到了 JSX , ES5 和 ES6这些术语。这些不透明的缩写很快就会让人混淆。
ES5(ES 代表 ECMAScript)基本上是“常规 JavaScript”。JavaScript 的第五次更新,ES5 于2009年完成。多年来,它一直受到所有主流浏览器的支持。因此,如果你最近编写或看过JavaScript,那么很可能是ES5。
ES6 是 JavaScript 的一个新版本,添加了一些很好的语法和功能。2015年定稿。ES6 几乎完全得到所有主流浏览器的支持。但是,在旧版本浏览器逐步停止使用还需要一段时间。例如,IE 11 就不支持 ES6, 但拥有约12%的浏览器市场份额。
为了获得 ES6 的好处,我们必须做一些事情才能让它在尽可能多的浏览器中运行:
- 我们必须转换代码,以便更广泛的浏览器能够理解我们的 JavaScript。这也意味着将 ES6 转换为 ES5。
- 我们必须包括一个垫片或polyfill,它提供在ES6中添加的浏览器可能有或没有的附加功能。
我们将在稍后的系列文章中看到如何实现这一点。
我们在本系列写的大多数代码都可以轻松转换成 ES5。在我们使用 ES6 的情况下,我们将首先介绍该功能,然后逐步介绍它。
正如我们将看到的,我们所有的 React 组件都有一个 render 函数,它指定了 React 组件的 HTML 输出。JavaScript eXtension, 或更常见的 JSX, 是一个 React 扩展,它允许我们编写类似 HTML 的 JavaScript。
尽管在之前的范例中,将 JavaScript 和标记包含在同一个地方被视为一种坏习惯。但事实证明,将视图和功能相结合可以直接推理视图。
为了看看这意味着什么,假设我们有一个 React 组件,它呈现一个 h1 HTML 标记。JSX 允许我们以一种非常类似 HTML 的方式声明这个元素:
class HelloWorld extends React.Component {
render() {
return (
<h1 className='large'>Hello World</h1>
)
}
}
复制代码
Hello World
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 中,类语法将转换为:
var HelloWorld = function() {}
Object.extends(HelloWorld, React.Component)
HelloWorld.prototype.render = function(){}
复制代码
因为 JSX 是 JavaScript,所以我们不能使用 JavaScript保留字。这包括 class 和 for 等词 。
React 为我们提供了属性 className。我们在 HelloWorld 中使用它在 h1 标签上设置 large 类。还有一些其他属性,例如标签的 for 属性,React 将它转换为 htmlFor。 当我们使用它们时会看到这些。
如果我们想编写纯 JavaScript 而不是依赖 JSX 编译器,我们可以只编写 React.createElement() 函数而不用担心抽象层。但是我们喜欢 JSX。对于复杂组件,它更具可读性。考虑以下 JSX:
<div> <img src="profile.jpg" alt="Profile photo" /> <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 应用程序时,加入我们。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Web Designer's Idea Book
Patrick Mcneil / How / 2008-10-6 / USD 25.00
The Web Designer's Idea Book includes more than 700 websites arranged thematically, so you can find inspiration for layout, color, style and more. Author Patrick McNeil has cataloged more than 5,000 s......一起来看看 《The Web Designer's Idea Book》 这本书的介绍吧!