寫react怎麼能不懂jsx? 啊? 能夠啊 誰說沒jsx react跑不起來的。對,能夠,那你是要接盤俠看十幾天都沒看懂你的標籤結構嗎......javascript
jsx 即 javascript XML。??? 什麼鬼 JavaScript 跟xml 的結合體嗎?這麼會玩?沒錯,jsx就是在javasccript中構建 XML 標籤的 語法,在react中使用jsx並非必須的,可是有更好的東西爲何不用。(就好像學校說此次的補習是自願的,你們能夠自行選擇......)html
舉個栗子:
不用jsx建立標籤是這樣的vue
// 注意對象若是不換行寫 逗號後面要加個空格,不要不加噢 react.createElement('h1', {className: 'question', 'question'})
使用jsx 是這個樣子的html5
<h1 className="question">question</h1>
嗯哼?你自願補習不?java
上面的語法是等效的,就是說你怎麼寫出來的結果都是同樣的,怎麼感受這像語法糖,可是卻沒人這麼說,是否是我對語法糖有什麼誤解?react
jsx跟以往的在js中寫html相比,有這麼幾個特色:git
等等 你說他好,爲何他好github
是的,你不以爲很熟悉嗎?個人天啊,簡直就是html,不須要會代碼,知道html標籤的人都能看懂你的標籤結構,特別是,ui小姐姐,當他說你這裏差了 1px的時候... 當他說你這個結構不該該是這樣的時候...(一臉幸福,ui竟然是個小姐姐)函數
jsx容許你使用全部預約義的html5標籤和自定義標籤。爽吧,標籤名字自定義了,你語義化的能力多高,你的項目的語義化程度就有多高。騷年,靠你了。ui
相對於使用原生js來寫的結構,跟jsx可讀性是沒得比的
使用jsx能更好的抽象問題,當你的需求發現小許改變時,如果抽象得當你會發現,你要改的代碼不多或者根本不用更改
var Header = React.createClass ({ render: function () { return ( <div className="header"> <h1>title</h1> </div> ) } })
上面還只是一個一次性的組件,要讓這個組件使用起來,還須要一些動態元素
跟vue的動態模版不一樣,jsx中的動態使用的是單花括號{...}, 花括號指明一個JavaScript上下文環境,你再花括號裏面放入任何東西都會進行求值,因此不要在裏面 new... var...
對於簡單的值,你能夠直接在裏面放一個變量,就像這樣
var title = 'title' <h1>{text}</h1>
對於更復雜的邏輯,你可能須要一個函數來執行邏輯,而後把值返回,像這樣
var getTitle = function () { if (xxxx) { return 'xxxx' } else { return 'xxxxx' } } <h1>{getTitle}</h1>
react將自定義組件的開始標籤到結束標籤之間的全部子節點都放在一個 this.props.children 的內置屬性裏面
而後組件你就能夠這樣寫
<div className="title"> <h1>{this.props.chlidren}<h1> </div>
而後你就能夠想html標籤同樣使用你的自定義組件
<Header>title</Header>
jsx很像html,可是jsx的設計並無參考html,我的認爲,即便沒有html jsx 也仍是這樣設計。
html中 咱們用內聯給標籤設置屬性,就像這樣
<p id="ha" class="haha">哈哈哈</p>
jsx 不只能夠實現靜態,也還能夠實現動態,就像這樣
<p id="haha" className={xxx: xxx}></p>
jsx的{}中只能寫表達式,並不能寫語句,那麼趕上這種狀況怎麼辦?
// 這種 <div>{if (isright) {'right'}}</div>
oh no 上面的寫法會直接忽略,那怎麼辦
解決辦法有下面3種
? :
<div>{isRight ?'right' : 'noRight'}</div>
getIsRight: function () { if (this.isRight) { return 'right' } else { return 'noRight' } } <div>{this.isRight}</div>
// 若是前面的值是true 呢麼這個表達式會返回&& 後面的值 <div>{this.isRight && 'right'}</div>
handlerClick = function () { consoe.log('你點擊了我') } <div onClick={this.handleClick}>哈哈哈</div>
更多的jsx官方規範 請看這裏