React使用JSX進行範本化,而不是使用普通的JavaScript。因為沒有必要使用Javascript,但是,下麵是一些它的利弊。
- 它更快,因為它在將代碼編譯為JavaScript時執行優化。
- 它也是類型安全的,在編譯過程中大部分錯誤都可以被捕獲。
- 如果熟悉HTML,則可以更輕鬆,更快地編寫範本。
使用JSX
在大多數情況下,JSX看起來像一個普通的HTML。 我們已經在“開發環境設置”一章中使用了它。 下麵來看看App.jsx中返回div
的代碼。
檔:App.jsx -
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
Hello World!!!
</div>
);
}
}
export default App;
儘管它與HTML很相似,但在處理JSX時還需要記住一些事項。
嵌套的元素
如果想返回更多的元素,需要用一個容器元素來包裝它。注意這裏我們如何使用div
作為h1
,h2
和p
元素的包裝。
檔:App.jsx -
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
<h1>Header h1</h1>
<h2>Content h2</h2>
<p>This is the content ~ </p>
</div>
);
}
}
export default App;
運行上面示例代碼,得到以下結果 -
屬性
除了常規的HTML屬性外,還可以使用自己的自定義屬性。 當想要添加自定義屬性時,需要使用數據首碼。在下面的例子中,我們添加了data-myattribute
作為p
元素的一個屬性。
檔:App.jsx -
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
<h1>Header h1</h1>
<h2>Content h2</h2>
<p data-myattribute = "somevalue">This is the content ~ </p>
</div>
);
}
}
export default App;
JavaScript運算式
JavaScript運算式可以在JSX中使用。只需要用大括弧{}
來包裝它。 以下示例將呈現數字:2
。
檔:App.jsx -
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
<h1>結果值為:{1+1}</h1>
</div>
);
}
}
export default App;
執行上面示例代碼,得到以下結果 -
不能在JSX中使用if else
語句,而是使用條件(三元)運算式。 在下面的例子中,變數i
等於1
,所以流覽器將呈現為真,如果將其更改為其他值,它將呈現false
。
檔:App.jsx -
import React from 'react';
class App extends React.Component {
render() {
var i = 1;
return (
<div>
<h1>{i == 1 ? 'True!' : 'False'}</h1>
</div>
);
}
}
export default App;
執行上面示例代碼,得到以下結果 -
樣式
React建議使用內聯樣式。當想要設置內聯樣式時,需要使用駝峰(camelCase
)語法。 React還會在特定元素的數值後自動附加px
。以下示例顯示如何將myStyle
內聯添加到h1
元素。
檔:App.jsx -
import React from 'react';
class App extends React.Component {
render() {
var myStyle = {
fontSize: 40,
color: 'green'
}
return (
<div>
<h1 style = {myStyle}>Header</h1>
</div>
);
}
}
export default App;
執行上面示例代碼,得到以下結果 -
注釋
在寫注釋時,我們需要在想要在標籤的子部分寫注釋的時候放上大括弧{}
。 在編寫注釋時總是使用{}
是一個好習慣,因為我們希望在編寫應用程式時保持一致。如下代碼所示 -
import React from 'react';
class App extends React.Component {
render() {
return (
<div>
<h1>Header</h1>
{//End of the line Comment...}
{/*Multi line comment...*/}
</div>
);
}
}
export default App;
命名約定
HTML標籤總是使用小寫的標籤名稱,而React組件以大寫字母開頭。
注意 - 應該使用
className
和htmlFor
作為XML屬性名稱,而不是class
和for
。
這在React官方頁面上解釋為 -
由於JSX是JavaScript,所以不鼓勵使用類和識別字等識別字作為XML屬性名稱。 React DOM組件期望使用DOM屬性名稱,例如className
和htmlFor
。