本文轉載自:眾成翻譯
譯者:iOSDevLog
連結:http://www.zcfy.cc/article/3797
原文:https://www.fullstackreact.com/30-days-of-react/day-2/
現在我們知道React是什麼,讓我們來看看這個系列的其餘部分將會出現的幾個術語和概念。
在我們前面的文章中,我們看了一下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的好處今天,我們必須做一些事情,使它工作在儘可能多的瀏覽器,我們可以:
- 我們必須 轉換 我們的程式碼,以便更廣泛的瀏覽器瞭解我們的JavaScript。這意味著將ES6 JavaScript轉換為ES5 JavaScript。
- We have to include a shim or polyfill that provides additional functionality added in ES6 that a browser may or may not have.
- 我們必須包括一個墊片或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>
<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應用程式。