JSX是個什么鬼

思考一下這樣的變量聲明:

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

上面這個好玩的標(biāo)記語法既不是字符串也不是html篱蝇,它被稱之為JSX穗酥,是一種對javascript的擴(kuò)展龄章。我們建議你使用它來描繪界面上的UI組件痊项。JSX或許會使你想起模版語言胳赌,但是它卻擁有javascript的強(qiáng)大的力量咳榜。


用JSX寫出的這種聲明被稱之為“elements”夏醉,我們將會在下一個章節(jié)將它渲染到DOM樹上,接下來涌韩,你將會了解到JSX怎么使用畔柔,明白它具有夢幻般的魔力的原因????。


1臣樱。JSX中可以嵌入javascript

你可以將任何javascript代碼用大括號{}包起來嵌入到JSX里面靶擦,舉個例子:2+2user.name雇毫,和formatName(user)都是OK的玄捕。
<code>
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')
);
</code>
在CodePen上試試吧
上面的代碼將它分為多行來寫只是為了更清晰的閱讀,這并不是強(qiáng)制的棚放,所以在實(shí)際寫代碼中符合規(guī)則就行桩盲,但是我們?nèi)砸ㄗh你用小括號()把JSX包起來,因?yàn)橐遣贿@么做的話可能會有暗坑席吴。

2赌结。JSX可以被看作一般的javascript變量

在解釋器解析用JSX寫的代碼后,會把它完全轉(zhuǎn)換成javascript代碼孝冒,這就意味著你可以在JSX里面用if判斷語句柬姚,for循環(huán)語句,將其指定為變量庄涡,參數(shù)量承,或者返回值等等。
<code>
function getGreeting(user) {
if (user) {
return <h1>Hello, {formatName(user)}!</h1>;
}
return <h1>Hello, Stranger.</h1>;
}
</code>

3穴店∷汉矗可以指定JSX的參數(shù)

參數(shù)可以用字符串形式指定:
const element = <div tabIndex="0"></div>;
也可以用javascript表達(dá)式指定:
const element = <img src={user.avatarUrl}></img>;

4。指定JSX的孩子節(jié)點(diǎn)

如果這個JSX沒有孩子的話泣洞,直接用/>結(jié)束:
const element = <img src={user.avatarUrl} />;
如果這個JSX包含孩子的話:
const element = ( <div> <h1>Hello!</h1> <h2>Good to see you here.</h2> </div> );
警告:
因?yàn)镴SX更接近于javascripte而不是html忧风,所以ReactDom標(biāo)簽的參數(shù)名用駝峰命名法命名而不是html標(biāo)簽的命名發(fā),比如:html里面的class變成了className球凰,tabindex變成了tabIndex狮腿。

5腿宰。JSX可以防止注入攻擊

在JSX插入用戶輸入的值是非常安全的:
const title = response.potentiallyMaliciousInput; // 這樣是安全的: const element = <h1>{title}</h1>;
在默認(rèn)狀態(tài)下,ReactDom會忽略所以插入JSX的值直到渲染它們之前缘厢。因此這種機(jī)制確保了你不會注入任何在你書寫應(yīng)用時不確定的值吃度。所以東西都會被轉(zhuǎn)換成字符串直到它們被渲染。它確保了XSS攻擊贴硫。

6椿每。JSX實(shí)際上就是Javascript中的對象

Babel解釋JSX的時候會調(diào)用React.createElement()這個函數(shù)。下面的這兩個例子是一樣的:
one:
const element = ( <h1 className="greeting"> Hello, world! </h1> );
two:
const element = React.createElement( 'h1', {className: 'greeting'}, 'Hello, world!' );
React.createElement()會對你寫的代碼進(jìn)行一些檢測以便于你的代碼不出bug英遭,但實(shí)際上還是將JSX轉(zhuǎn)換成了一個對象间护,向下面這樣:
const element = { type: 'h1', props: { className: 'greeting', children: 'Hello, world' } };
這個對象就被稱為React elements。你可以把它描述為你想在屏幕上顯示的元素贪绘。React用這些元素來構(gòu)建DOM樹并且保證它們可以實(shí)時更新兑牡。我們將會在下一個章節(jié)將這些element渲染到DOM樹上??????。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末税灌,一起剝皮案震驚了整個濱河市均函,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌菱涤,老刑警劉巖苞也,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異粘秆,居然都是意外死亡如迟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進(jìn)店門攻走,熙熙樓的掌柜王于貴愁眉苦臉地迎上來殷勘,“玉大人,你說我怎么就攤上這事昔搂×嵯” “怎么了?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵摘符,是天一觀的道長贤斜。 經(jīng)常有香客問我,道長逛裤,這世上最難降的妖魔是什么瘩绒? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮带族,結(jié)果婚禮上锁荔,老公的妹妹穿的比我還像新娘。我一直安慰自己炉菲,他們只是感情好堕战,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布坤溃。 她就那樣靜靜地躺著拍霜,像睡著了一般嘱丢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祠饺,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天越驻,我揣著相機(jī)與錄音,去河邊找鬼道偷。 笑死缀旁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勺鸦。 我是一名探鬼主播并巍,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼换途!你這毒婦竟也來了懊渡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤军拟,失蹤者是張志新(化名)和其女友劉穎剃执,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體懈息,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡肾档,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辫继。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片怒见。...
    茶點(diǎn)故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖姑宽,靈堂內(nèi)的尸體忽然破棺而出遣耍,到底是詐尸還是另有隱情,我是刑警寧澤低千,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布配阵,位于F島的核電站,受9級特大地震影響示血,放射性物質(zhì)發(fā)生泄漏棋傍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一难审、第九天 我趴在偏房一處隱蔽的房頂上張望瘫拣。 院中可真熱鬧,春花似錦告喊、人聲如沸麸拄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拢切。三九已至蒂萎,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淮椰,已是汗流浹背五慈。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留主穗,地道東北人泻拦。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像忽媒,于是被迫代替她去往敵國和親争拐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,792評論 2 345

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

  • 以下內(nèi)容是我在學(xué)習(xí)和研究React時晦雨,對React的特性架曹、重點(diǎn)和注意事項(xiàng)的提取、精練和總結(jié)金赦,可以做為React特性...
    科研者閱讀 8,219評論 2 21
  • 關(guān)于JSX 考慮這樣一段代碼:const element = Hello, world! ;這段代碼既不是字符串...
    帶三本書閱讀 366評論 0 1
  • Yes, React is taking over front-end development. The ques...
    Transnet2014閱讀 952評論 0 2
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南音瓷,這只是我在學(xué)習(xí)過程中的一些閱讀筆記,個人覺得該教程講解深入淺出夹抗,比目前大...
    leonaxiong閱讀 2,810評論 1 18
  • #玩卡不卡·每日一抽# 每一位都可以通過這張卡片覺察自己: 1绳慎、直覺他叫什么名字?安妮 2漠烧、他幾歲了杏愤? 10歲 ...
    Maggie_AU閱讀 155評論 0 0