?
This document uses PHP Chinese website manual Release
考慮這個(gè)變量聲明:
const element = <h1>Hello, world!</h1>;
這個(gè)有趣的標(biāo)簽語法既不是字符串也不是HTML。
它被稱為JSX,它是JavaScript的語法擴(kuò)展。我們建議在React中使用它來描述UI的外觀。JSX可能會(huì)提醒您一種模板語言,但它具有JavaScript的全部功能。
JSX生成React“元素”。我們將在下一節(jié)探討將它們呈現(xiàn)給DOM。在下面,您可以找到啟動(dòng)JSX所需的基礎(chǔ)知識(shí)。
您可以通過將其包含在大括號(hào)中來嵌入JSX中的任何JavaScript表達(dá)式。
例如2 + 2
,user.firstName
和formatName(user)
都是有效的表達(dá)式:
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'));
為了便于閱讀,我們將JSX分成多行。盡管這不是必需的,但當(dāng)我們這樣做時(shí),我們還建議將它包裝在括號(hào)中以避免自動(dòng)分號(hào)插入的缺陷。
編譯之后,JSX表達(dá)式就變成了常規(guī)的JavaScript對(duì)象。
這意味著您可以在if
語句和for
循環(huán)中使用JSX ,將其分配給變量,將其作為參數(shù)接受,并從函數(shù)中返回:
function getGreeting(user) { if (user) { return <h1>Hello, {formatName(user)}!</h1>; } return <h1>Hello, Stranger.</h1>; }
您可以使用引號(hào)將字符串文字指定為屬性:
const element = <div tabIndex="0"></div>;
您也可以使用大括號(hào)將JavaScript表達(dá)式嵌入屬性中:
const element = <img src={user.avatarUrl}></img>;
在屬性中嵌入JavaScript表達(dá)式時(shí),請(qǐng)勿將大括號(hào)括起來。您應(yīng)該使用引號(hào)(用于字符串值)或大括號(hào)(用于表達(dá)式),但不能同時(shí)使用同一個(gè)屬性。
警告: 由于JSX比HTML更接近JavaScript,因此React DOM使用
camelCase
屬性命名約定而不是HTML屬性名稱。例如,class
變成className
JSX,tabindex
成為tabIndex
。
如果標(biāo)簽為空,您可以立即關(guān)閉它/>
,例如XML:
const element = <img src={user.avatarUrl} />;
JSX標(biāo)簽可能包含子項(xiàng):
const element = ( <div> <h1>Hello!</h1> <h2>Good to see you here.</h2> </div>);
在JSX中嵌入用戶輸入是安全的:
const title = response.potentiallyMaliciousInput;// This is safe:const element = <h1>{title}</h1>;
默認(rèn)情況下,React DOM 在渲染之前轉(zhuǎn)義嵌入在JSX中的任何值。因此它確保您永遠(yuǎn)不會(huì)注入任何未明確寫入應(yīng)用程序的內(nèi)容。在呈現(xiàn)之前,所有內(nèi)容都會(huì)轉(zhuǎn)換為字符串。這有助于防止XSS(跨站點(diǎn)腳本)攻擊。
Babel將JSX編譯為React.createElement()
調(diào)用。
這兩個(gè)例子是相同的:
const element = ( <h1 className="greeting"> Hello, world! </h1>);
const element = React.createElement( 'h1', {className: 'greeting'}, 'Hello, world!');
React.createElement()
執(zhí)行一些檢查以幫助您編寫無錯(cuò)代碼,但本質(zhì)上它會(huì)創(chuàng)建一個(gè)如下所示的對(duì)象:
// Note: this structure is simplifiedconst element = { type: 'h1', props: { className: 'greeting', children: 'Hello, world' }};
這些對(duì)象被稱為“React元素”。你可以把它們想象成你想要在屏幕上看到的東西的描述。React讀取這些對(duì)象并使用它們來構(gòu)建DOM并使其保持最新狀態(tài)。
我們將在下一節(jié)探討將React元素渲染到DOM。
提示: 我們建議您使用“Babel”語言定義用于所選編輯器,以便ES6和JSX代碼都能正確突出顯示。本網(wǎng)站使用與其兼容的Oceanic Next色彩方案。