React之JSX


什么是JSX

React的核心機(jī)制之一就是虛擬DOM:可以在內(nèi)存中創(chuàng)建虛擬的DOM元素。React利用虛擬DOM來減少對實(shí)際DOM的操作從而提升性能。當(dāng)然,虛擬DOM也可以通過JavaScript來創(chuàng)建,例如:

var child1 = React.createElement('li', null, 'First');
var child2 = React.createElement('li', null, 'Second');

createElement語法:

ReactElement createElement(
  string/ReactClass type,
  [object props],
  [children ...]
)
創(chuàng)建并返回一個(gè)新的指定類型的ReactElement。type  參數(shù)可以是一個(gè)html標(biāo)簽名字符串(如:"div","span"等),或者是ReactClass(通過React.createClass 創(chuàng)建的)。

使用這樣的機(jī)制,我們完全可以用JavaScript構(gòu)建完整的界面DOM樹,正如我們可以用JavaScript創(chuàng)建真實(shí)DOM。但是,這樣的代碼可讀性差,于是React發(fā)明了JSX, 利用我們熟悉的HTML語法來創(chuàng)建虛擬的DOM:

var root = (
  <ul>
    <li>First</li>
    <li>Secont</li>
  </ul>
);

這兩段代碼是完全等價(jià)的,后者將XML語法直接加入到JavaScript代碼中,讓你能夠高效的通過代碼而不是模板來定義界面。之后JSX通過翻譯器轉(zhuǎn)換到純JavaScript再由瀏覽器執(zhí)行。
因此,JSX本身并不是什么高深的技術(shù),可以說只是一個(gè)比較高級但很直觀的語法糖。它非常有用,卻不是一個(gè)必需品,沒有JSX的React也可以正常工作:只要你樂意用JavaScript代碼去創(chuàng)建這些虛擬DOM元素。

JSX語法

基本規(guī)則:遇到HTML標(biāo)簽(以< 開頭),就用HTML規(guī)則解析;遇到代碼塊(以{ 開頭),就用JavaScript規(guī)則解析。
例如:

var names = ['Alice', 'Emily', 'Kate'];
ReactDOM.render( 
  <div> 
  { 
    names.map(function (name) {
     return <div>Hello, {name}!</div> 
    }) 
  } 
  </div>,
 document.getElementById('example'));

輸出結(jié)果:

Hello, Alice!
Hello, Emily!
Hello, Kate!

小語法總結(jié):

  • JSX中 使用js表達(dá)式,表達(dá)式寫在{}:
ReactDOM.render(
  <div>{1 + 1}</div>,
  document.getElementById('example')
);
  • JSX中 不能使用if else語句, 但可以使用三元運(yùn)算表達(dá)式來替代。
var person = <Person name={window.isLoggedIn ? window.name : ' '} />;
  • JSX中注釋需要寫在花括號(hào)中
ReactDOM.render(
  <div>{/*注釋*/}</div>,
  document.getElementById('example')
);
  • JSX中遇到數(shù)組,數(shù)組會(huì)自動(dòng)展開所以成員
var arr = [<h1>Alice</h1>, <h2>Emily</h2>];
ReactDOM.render(
  <div>{arr}</div>,
  document.getElementById('example')
);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容