react文檔——介紹JSX

介紹 JSX

考慮下面的變量聲明:

const element = <h1>Hello, world!</h1>;

這是個有趣的標簽語法斩启,它既不是一個字符串夜牡,也不是 HTML商架。

它叫 JSX堰怨,是對 JavaScript 的語法擴展。我們推薦結(jié)合 React 使用它來描述 UI 看起來應(yīng)該是什么樣蛇摸。JSX 可能讓你想起模板語言备图,但是它具有 JavaScript 的全部能力。

JSX 生成 React “元素”赶袄。我們我們將在下一章探索把它們渲染到 DOM揽涮。下面,你可以找到讓你開始的 JSX 必備的基礎(chǔ)知識幻馁。

在 JSX 中插入表達式

你可以通過包裹在大括號中在 JSX 插入任意的 JavaScript 表達式立美。例如政恍,2+2user.nameformatName(user)都是有效的表達式:

function formatName(user) {
  return user.firstName + ' ' + user.lastName;
}

const user = {
  firstName: 'Harper',
  lastName: 'Perez'
};

const element = (
  <h1>
    Hello, {formatName(user)}!
  </h1>
);

ReactDOM.render(
  element,
  document.getElementById('root')
);

CodePen試試雪标。

為了可讀性,我們拆分 JSX 為多行溉跃。雖然這不是強制的村刨,當這樣做時,我們還推薦把它包裹在括號中來避免 js 自動插入分號的陷阱撰茎。

JSX 也是表達式

經(jīng)過編譯后嵌牺,JSX 表達式變成普通的 JavaScript 對象。

這意味著乾吻,你可以在if語句和for循環(huán)中使用 JSX髓梅、把它賦值給變量、作為參數(shù)接收绎签、從函數(shù)返回枯饿。

function getGreeting(user) {
  if (user) {
    return <h1>Hello, {formatName(user)}!</h1>;
  }
  return <h1>Hello, Stranger.</h1>;
}

使用 JSX 指定屬性

你可以使用引號來指定字符串字面量來作為屬性:

const element = <div tabIndex="0"></div>;

你也可以使用大括號在屬性中插入 JavaScript 表達式:

const element = <img src={user.avatarUrl}></img>;

使用 JSX 指定子元素

如果一個標簽是空元素。你可以像 XML 一樣使用/>自閉合標簽:

const element = <img src={user.avatarUrl} />;

JSX 標簽可以包含子元素:

const element = (
  <div>
    <h1>Hello!</h1>
    <h2>Good to see you here.</h2>
  </div>
);

警告

由于 JSX 相比于 HTML 更接近 JavaScript诡必,ReactDOM 使用cameCase(駝峰命名)作為屬性命名約定代替 HTML 屬性名奢方。

例如搔扁,在 JSX 中class變成classNametabindex變成tabIndex蟋字。

JSX 預防注入攻擊

在 JSX 中嵌入用戶的輸入是安全的稿蹲。

const title = response.potentiallyMaliciousInput;
// 這是安全的:
const element = <h1>{title}</h1>;

默認,在渲染之前鹊奖,ReactDOM 會轉(zhuǎn)換任何在 JSX 中插入的值苛聘。因此來確保在你的應(yīng)用中永遠不能注入任何沒有明確書寫的東西。所有的東西在開始渲染前都被轉(zhuǎn)換成字符串忠聚。這有助于預防XXS(跨站腳本攻擊)设哗。

JSX 表示對象

Babel 編譯 JSX 直到 React.createElement()調(diào)用。

這兩個例子是完全相同的:

const element = (
  <h1 className="greeting">
    Hello, world!
  </h1>
);
const element = React.createElement(
  'h1',
  {className: 'greeting'},
  'Hello, world!'
);

React.createElement()執(zhí)行一些檢查幫助你寫出沒有bug的代碼两蟀,但本質(zhì)上网梢,它創(chuàng)建一個像這樣的對象:

// 注意:這個結(jié)構(gòu)是簡化的
const element = {
  type: 'h1',
  props: {
    className: 'greeting',
    children: 'Hello, world'
  }
};

這些對象稱為“React元素”。你可以把它們想象成你想在屏幕上看到的東西的描述赂毯。React讀取這些對象战虏,并使用它們構(gòu)造DOM并保持更新。

我們將在下一章節(jié)探索渲染 React 元素到DOM党涕。

Tip:

我們推薦為你選的編輯器搜索“Babel”語法主題烦感,以便于 ES6 和 JSX 代碼正確的高亮顯示。

下一步

渲染元素

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末遣鼓,一起剝皮案震驚了整個濱河市啸盏,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌骑祟,老刑警劉巖回懦,帶你破解...
    沈念sama閱讀 211,042評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異次企,居然都是意外死亡怯晕,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評論 2 384
  • 文/潘曉璐 我一進店門缸棵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來舟茶,“玉大人,你說我怎么就攤上這事堵第“闪梗” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評論 0 345
  • 文/不壞的土叔 我叫張陵踏志,是天一觀的道長阀捅。 經(jīng)常有香客問我,道長针余,這世上最難降的妖魔是什么饲鄙? 我笑而不...
    開封第一講書人閱讀 56,340評論 1 283
  • 正文 為了忘掉前任凄诞,我火速辦了婚禮,結(jié)果婚禮上忍级,老公的妹妹穿的比我還像新娘帆谍。我一直安慰自己,他們只是感情好轴咱,可當我...
    茶點故事閱讀 65,404評論 5 384
  • 文/花漫 我一把揭開白布汛蝙。 她就那樣靜靜地躺著,像睡著了一般嗦玖。 火紅的嫁衣襯著肌膚如雪患雇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,749評論 1 289
  • 那天宇挫,我揣著相機與錄音,去河邊找鬼酪术。 笑死器瘪,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的绘雁。 我是一名探鬼主播橡疼,決...
    沈念sama閱讀 38,902評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼庐舟!你這毒婦竟也來了欣除?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評論 0 266
  • 序言:老撾萬榮一對情侶失蹤挪略,失蹤者是張志新(化名)和其女友劉穎历帚,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體杠娱,經(jīng)...
    沈念sama閱讀 44,110評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡挽牢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了摊求。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片禽拔。...
    茶點故事閱讀 38,577評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖室叉,靈堂內(nèi)的尸體忽然破棺而出睹栖,到底是詐尸還是另有隱情,我是刑警寧澤茧痕,帶...
    沈念sama閱讀 34,258評論 4 328
  • 正文 年R本政府宣布野来,位于F島的核電站,受9級特大地震影響凿渊,放射性物質(zhì)發(fā)生泄漏梁只。R本人自食惡果不足惜缚柳,卻給世界環(huán)境...
    茶點故事閱讀 39,848評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搪锣。 院中可真熱鬧秋忙,春花似錦、人聲如沸构舟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狗超。三九已至弹澎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間努咐,已是汗流浹背苦蒿。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渗稍,地道東北人佩迟。 一個月前我還...
    沈念sama閱讀 46,271評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像竿屹,于是被迫代替她去往敵國和親报强。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,452評論 2 348

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

  • 以下內(nèi)容是我在學習和研究React時拱燃,對React的特性秉溉、重點和注意事項的提取、精練和總結(jié)碗誉,可以做為React特性...
    科研者閱讀 8,222評論 2 21
  • 原文地址:Learning React.js is easier than you think原文作者:Samer...
    sunshine小小倩閱讀 4,220評論 3 41
  • 本筆記基于React官方文檔召嘶,當前React版本號為15.4.0。 1. 安裝 1.1 嘗試 開始之前可以先去co...
    Awey閱讀 7,658評論 14 128
  • GUIDS 第一章 為什么使用React诗充? React 一個提供了用戶接口的JavaScript庫苍蔬。 誕生于Fac...
    jplyue閱讀 3,525評論 1 11
  • 上周末共修秀文老師帶的蘇菲旋轉(zhuǎn):當在第一環(huán)動作時,相同的體式不斷地重復蝴蜓,期間念頭也不間斷地進來碟绑,看到回到當下,感知...
    俠骨丹心9號閱讀 750評論 0 7