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

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

本文轉(zhuǎn)載自:眾成翻譯
譯者:iOSDevLog
鏈接:http://www.zcfy.cc/article/3797
原文:https://www.fullstackreact.com/30-days-of-react/day-2/

現(xiàn)在我們知道React是什么孕荠,讓我們來看看這個系列的其余部分將會出現(xiàn)的幾個術(shù)語和概念蒸健。

在我們前面的文章中,我們看了一下[React](https://facebook.github.io/react/),并在高級別上討論了它的工作原理。 在本文中,我們將介紹React生態(tài)系統(tǒng)的一部分:ES6和JSX涛浙。

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

在互聯(lián)網(wǎng)上的任何粗略的搜索尋找React材料,毫無疑問,你已經(jīng)遇到了術(shù)語JSX轿亮,ES5和ES6疮薇。這些難懂的首字母縮略詞可能會很快混亂。

ES5(ES 代表ECMAScript)基本上是“常規(guī)JavaScript”我注。第5次更新JavaScript按咒,ES5在2009年完成。它已被所有主要瀏覽器支持多年仓手。因此胖齐,如果你在最近寫過或看過任何JavaScript,很可能是ES5嗽冒。

ES6是一個新版本的JavaScript呀伙,添加了一些不錯的語法和功能添加。它在2015年完成添坊。ES6 幾乎完全支持 所有主要的瀏覽器剿另。但這將是一段時間,直到較舊版本的Web瀏覽器逐步停止使用贬蛙。例如雨女,Internet Explorer 11不支持ES6,但是具有大約12%的瀏覽器市場份額阳准。

為了獲得ES6的好處今天氛堕,我們必須做一些事情,使它工作在盡可能多的瀏覽器野蝇,我們可以:

  1. 我們必須 轉(zhuǎn)換 我們的代碼讼稚,以便更廣泛的瀏覽器了解我們的JavaScript。這意味著將ES6 JavaScript轉(zhuǎn)換為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中添加的瀏覽器可能具有或可能沒有的附加功能。

我們將在本系列的稍后部分看到我們?nèi)绾巫龅竭@一點乍狐。

我們將在本系列中編寫的大多數(shù)代碼都可以輕松地轉(zhuǎn)換為ES5赠摇。在我們使用ES6的情況下,我們將首先介紹功能浅蚪,然后通過它藕帜。

我們將看到,所有的React組件都有一個render函數(shù)惜傲,它指定了React組件的HTML輸出耘戚。JavaScript eXtension,或更常見的JSX操漠,是一個React擴(kuò)展收津,允許我們編寫看起來像 HTML的JavaScript 饿这。

盡管在以前的范例中,將JavaScript和標(biāo)記包含在同一個地方被認(rèn)為是一種不好的習(xí)慣撞秋,但是結(jié)果是將視圖與功能相結(jié)合使得對視圖的推理變得非常簡單长捧。

看看這是什么意思,想象一下吻贿,我們有一個React組件來呈現(xiàn)一個h1 HTML標(biāo)簽串结。JSX允許我們以非常類似于HTML的方式聲明這個元素:

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

這個HelloWorld組件中的render()函數(shù)看起來像它的返回HTML,但其實這是JSX舅列。JSX 在運行時被翻譯成常規(guī)JavaScript肌割。那個組件,翻譯后帐要,看起來像這樣:

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

雖然JSX看起來像HTML把敞,但它實際上只是一種更靈敏的方式React.createElement()來編寫聲明。當(dāng)組件渲染時榨惠,它輸出一個React元素樹或該組件輸出的HTML元素的虛擬表示奋早。React然后將基于此React元素表示來確定對實際DOM所做的更改。在HelloWorld組件的情況下赠橙,React寫入DOM的HTML將如下所示:

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

class extends我們在第一個作出反應(yīng)組件使用的語法是ES6語法耽装。它允許我們使用熟悉的面向?qū)ο髽邮骄帉憣ο蟆?br> 在ES6中,class 語法可能翻譯為:

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

因為JSX是JavaScript期揪,我們不能使用JavaScript保留字掉奄。這包括class和像for

React提供了我們的屬性className凤薛。我們使用它在HelloWorld來設(shè)置我們的h1標(biāo)簽上的large 類姓建。還有一些其他屬性,如標(biāo)簽上的屬性for為轉(zhuǎn)換htmlFor 枉侧,因為for 也是保留字引瀑。當(dāng)我們開始使用它們時狂芋,我們將看看這些榨馁。

如果我們想要編寫純JavaScript而不是依賴于JSX編譯器,我們可以只寫該React.createElement()函數(shù)帜矾,而不必?fù)?dān)心抽象層翼虫。但我們喜歡JSX。它特別是更復(fù)雜的組件可讀性屡萤≌浣#考慮下面的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元素招拙。

現(xiàn)在我們了解JSX唧瘾,我們可以開始編寫我們的第一個React組件。明天加入我們别凤,當(dāng)我們跳進(jìn)我們的第一個React應(yīng)用程序饰序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市规哪,隨后出現(xiàn)的幾起案子求豫,更是在濱河造成了極大的恐慌,老刑警劉巖诉稍,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蝠嘉,死亡現(xiàn)場離奇詭異,居然都是意外死亡杯巨,警方通過查閱死者的電腦和手機(jī)蚤告,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舔箭,“玉大人罩缴,你說我怎么就攤上這事〔惴觯” “怎么了箫章?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長镜会。 經(jīng)常有香客問我檬寂,道長,這世上最難降的妖魔是什么戳表? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任桶至,我火速辦了婚禮,結(jié)果婚禮上匾旭,老公的妹妹穿的比我還像新娘镣屹。我一直安慰自己,他們只是感情好价涝,可當(dāng)我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布女蜈。 她就那樣靜靜地躺著,像睡著了一般色瘩。 火紅的嫁衣襯著肌膚如雪伪窖。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天居兆,我揣著相機(jī)與錄音覆山,去河邊找鬼。 笑死泥栖,一個胖子當(dāng)著我的面吹牛簇宽,可吹牛的內(nèi)容都是我干的勋篓。 我是一名探鬼主播,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼魏割,長吁一口氣:“原來是場噩夢啊……” “哼生巡!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起见妒,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤孤荣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后须揣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盐股,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年耻卡,在試婚紗的時候發(fā)現(xiàn)自己被綠了疯汁。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡卵酪,死狀恐怖幌蚊,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情溃卡,我是刑警寧澤溢豆,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布,位于F島的核電站瘸羡,受9級特大地震影響漩仙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜犹赖,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一队他、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峻村,春花似錦麸折、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至雾棺,卻和暖如春膊夹,著一層夾襖步出監(jiān)牢的瞬間衬浑,已是汗流浹背捌浩。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留工秩,地道東北人尸饺。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓进统,卻偏偏與公主長得像,于是被迫代替她去往敵國和親浪听。 傳聞我的和親對象是個殘疾皇子螟碎,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容

  • 本筆記基于React官方文檔,當(dāng)前React版本號為15.4.0迹栓。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,663評論 14 128
  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時掉分,對React的特性、重點和注意事項的提取克伊、精練和總結(jié)酥郭,可以做為React特性...
    科研者閱讀 8,222評論 2 21
  • 全棧React: 第3天 我們的第一個組件 本文轉(zhuǎn)載自:眾成翻譯譯者:iOSDevLog鏈接:http://www...
    古朋閱讀 281評論 0 1
  • GUIDS 第一章 為什么使用React? React 一個提供了用戶接口的JavaScript庫愿吹。 誕生于Fac...
    jplyue閱讀 3,525評論 1 11
  • 昨天看到人民日報發(fā)文批評豆瓣貓眼:惡意傷害國產(chǎn)電影犁跪,看到標(biāo)題我不禁虎軀一震椿息,難道我已經(jīng)暴露了嗎?難道給《長城》差評...
    Mr紹君閱讀 818評論 16 9