jsx 語法

React的核心機(jī)制之一就是可以在內(nèi)存中創(chuàng)建虛擬的DOM元素活逆。React利用虛擬DOM來減少對實(shí)際DOM的操作從而提升性能拯钻。

JSX簡介

JSX就是Javascript和XML結(jié)合的一種格式。React發(fā)明了JSX炒嘲,利用HTML語法來創(chuàng)建虛擬DOM蹬铺。

當(dāng)遇到<尝哆,JSX就當(dāng)HTML解析,遇到{就當(dāng)JavaScript解析甜攀。

如下(JS寫法)

varchild1 = React.createElement('li',null, 'First Text Content');varchild2 = React.createElement('li',null, 'Second Text Content');varroot = React.createElement('ul', { className: 'my-list' }, child1, child2);

等價于(JSX寫法)

varroot =(

    ? ?
  • First Text Content
  • ? ?
  • Second Text Content
  • ?
);

后者將XML語法直接加入JS中,通過代碼而非模板來高效的定義界面秋泄。之后JSX通過翻譯器轉(zhuǎn)換為純JS再由瀏覽器執(zhí)行。在實(shí)際開發(fā)中规阀,JSX在產(chǎn)品打包階段都已經(jīng)編譯成純JavaScript恒序,JSX的語法不會帶來任何性能影響。另外谁撼,由于JSX只是一種語法歧胁,因此JavaScript的關(guān)鍵字class, for等也不能出現(xiàn)在XML中,而要如例子中所示厉碟,使用className, htmlFor代替喊巍,這和原生DOM在JavaScript中的創(chuàng)建也是一致的。JSX只是創(chuàng)建虛擬DOM的一種語法格式而已,除了用JSX,我們也可以用JS代碼來創(chuàng)建虛擬DOM.

JSX語法介紹

大括號里是JavaScript箍鼓,不要加引號崭参,加引號就會被當(dāng)成字符串。

三元表達(dá)式

JSX本身就和XML語法類似袄秩,可以定義屬性以及子元素阵翎。唯一特殊的是可以用大括號來加入JavaScript表達(dá)式.例如:

varperson = ;

上述代碼經(jīng)過JSX編譯后會得到:

varperson =React.createElement(

Person,

{name: window.isLoggedIn? window.name : ''}

);

數(shù)組遞歸

數(shù)組循環(huán),數(shù)組的每個元素都返回一個React組件逢并。

varlis =this.todoList.todos.map(function(todo) {return(

  • ? ? ? ? ? ? {todo.text}? ?
  • );

    });varul =(

      {lis}
    );

    JSX中綁定事件

    JSX讓事件直接綁定在元素上之剧。

    Submit

    和原生HTML定義事件的唯一區(qū)別就是JSX采用駝峰寫法來描述事件名稱,大括號中仍然是標(biāo)準(zhǔn)的JavaScript表達(dá)式砍聊,返回一個事件處理函數(shù)背稼。

    React并不會真正的綁定事件到每一個具體的元素上,而是采用事件代理的模式:在根節(jié)點(diǎn)document上為每種事件添加唯一的Listener玻蝌,然后通過事件的target找到真實(shí)的觸發(fā)元素蟹肘。這樣從觸發(fā)元素到頂層節(jié)點(diǎn)之間的所有節(jié)點(diǎn)如果有綁定這個事件词疼,React都會觸發(fā)對應(yīng)的事件處理函數(shù)。這就是所謂的React模擬事件系統(tǒng)帘腹。盡管整個事件系統(tǒng)由React管理贰盗,但是其API和使用方法與原生事件一致。

    JSX中使用樣式

    在JSX中使用樣式和真實(shí)的樣式也很類似阳欲,通過style屬性來定義舵盈,但和真實(shí)DOM不同的是,屬性值不能是字符串而必須為對象球化。

    例如:

    Hello World.

    或者

    varstyle ={

    color:'#ff0000',

    fontSize:'14px'};varnode =

    HelloWorld.
    ;

    要明確記住,{}里面是JS代碼,這里傳進(jìn)去的是標(biāo)準(zhǔn)的JS對象秽晚。在JSX中可以使用所有的的樣式,基本上屬性名的轉(zhuǎn)換規(guī)范就是將其寫成駝峰寫法筒愚,例如“background-color”變?yōu)椤癰ackgroundColor”, “font-size”變?yōu)椤癴ontSize”赴蝇,這和標(biāo)準(zhǔn)的JavaScript操作DOM樣式的API是一致的。

    HTML轉(zhuǎn)義

    在組件內(nèi)部添加html代碼,并將html代碼渲染到頁面上巢掺。React默認(rèn)會進(jìn)行HTML的轉(zhuǎn)義句伶,避免XSS攻擊,如果要不轉(zhuǎn)義陆淀,可以這么寫:

    varcontent='content';

    React.render(

    ,document.body

    );

    自定義組件

    組件定義之后熄阻,可以利用XML語法去聲明,而能夠使用的XML Tag就是在當(dāng)前JavaScript上下文的變量名,該變量名就是組件名稱倔约。

    最后編輯于
    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
    • 序言:七十年代末秃殉,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子浸剩,更是在濱河造成了極大的恐慌钾军,老刑警劉巖,帶你破解...
      沈念sama閱讀 218,284評論 6 506
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件绢要,死亡現(xiàn)場離奇詭異吏恭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)重罪,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 93,115評論 3 395
    • 文/潘曉璐 我一進(jìn)店門樱哼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人剿配,你說我怎么就攤上這事搅幅。” “怎么了呼胚?”我有些...
      開封第一講書人閱讀 164,614評論 0 354
    • 文/不壞的土叔 我叫張陵茄唐,是天一觀的道長。 經(jīng)常有香客問我蝇更,道長沪编,這世上最難降的妖魔是什么呼盆? 我笑而不...
      開封第一講書人閱讀 58,671評論 1 293
    • 正文 為了忘掉前任,我火速辦了婚禮蚁廓,結(jié)果婚禮上访圃,老公的妹妹穿的比我還像新娘。我一直安慰自己相嵌,他們只是感情好挽荠,可當(dāng)我...
      茶點(diǎn)故事閱讀 67,699評論 6 392
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著平绩,像睡著了一般圈匆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捏雌,一...
      開封第一講書人閱讀 51,562評論 1 305
    • 那天跃赚,我揣著相機(jī)與錄音,去河邊找鬼性湿。 笑死纬傲,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的肤频。 我是一名探鬼主播叹括,決...
      沈念sama閱讀 40,309評論 3 418
    • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼宵荒!你這毒婦竟也來了汁雷?” 一聲冷哼從身側(cè)響起,我...
      開封第一講書人閱讀 39,223評論 0 276
    • 序言:老撾萬榮一對情侶失蹤报咳,失蹤者是張志新(化名)和其女友劉穎侠讯,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體暑刃,經(jīng)...
      沈念sama閱讀 45,668評論 1 314
    • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厢漩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點(diǎn)故事閱讀 37,859評論 3 336
    • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岩臣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片溜嗜。...
      茶點(diǎn)故事閱讀 39,981評論 1 348
    • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖架谎,靈堂內(nèi)的尸體忽然破棺而出炸宵,到底是詐尸還是另有隱情,我是刑警寧澤狐树,帶...
      沈念sama閱讀 35,705評論 5 347
    • 正文 年R本政府宣布焙压,位于F島的核電站,受9級特大地震影響抑钟,放射性物質(zhì)發(fā)生泄漏涯曲。R本人自食惡果不足惜,卻給世界環(huán)境...
      茶點(diǎn)故事閱讀 41,310評論 3 330
    • 文/蒙蒙 一在塔、第九天 我趴在偏房一處隱蔽的房頂上張望幻件。 院中可真熱鬧,春花似錦蛔溃、人聲如沸绰沥。這莊子的主人今日做“春日...
      開封第一講書人閱讀 31,904評論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽徽曲。三九已至,卻和暖如春麸塞,著一層夾襖步出監(jiān)牢的瞬間秃臣,已是汗流浹背。 一陣腳步聲響...
      開封第一講書人閱讀 33,023評論 1 270
    • 我被黑心中介騙來泰國打工哪工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留奥此,地道東北人。 一個月前我還...
      沈念sama閱讀 48,146評論 3 370
    • 正文 我出身青樓雁比,卻偏偏與公主長得像稚虎,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子偎捎,可洞房花燭夜當(dāng)晚...
      茶點(diǎn)故事閱讀 44,933評論 2 355

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