React 可以用 HTML tags(strings) 或是 React components(classes) 來產生出 HTML tag, 你只需在 JSX 中用小寫的 tag name 來定義 element:
1 | // HTML tags |
React 的 JSX 用大寫和小寫命名習慣來區分 componet classes 和 HTML tags
Note:
由於 JSX 其實還是 javascript 語言, 所以有些 HTML 的關鍵字像是
class,for… 等不能直接使用, 你可以用className,htmlFor… 來轉換
The Transform
1 | var Nav; |
為了讓 JSX 能使用 <Nav />, 我們在區域變數中必須要有一個 Nav 的變數存在.
JSX 也能允許用 XML 的語法定義子元素
1 | var Nav, Profile; |
- 你可以使用 JSX Compilier 來了解轉換後的 javascript 長什麼樣
- 也可以用 HTML to JSX converter 來將既有的 HTML 轉成 JSX 的表達方式.
JavaScript Expressions
Attribute Expressions
你可以用 {} 將一個 javascript expression 當作 attrubute value 傳遞進來
1 | // JSX |
Child Expressions
同樣地, javascript expressions 也可以用在表達子元素的時候:
1 | // JSX |
JSX Spread Attributes
一個明顯地錯誤使用就是在建立 element 之後又修改了 properties:
1 | var component = <Component />; |
在新版的 jSX 你可以用 Spread Attributes 的語法將現有的 props 帶入到另一個 component:
1 | var props = {}; |
你可以多次組合其它的 attributes: (後者會覆蓋前者)
1 | var perops = {foo: 'default'}; |
1 | var oldObj = { foo: 'hello', bar: 'world' }; |
合併兩個物件你可以這麼作:
1 | var ab = { ...a, ...b }; |
若你使用 react-tools Precompilier, 你需要加上
--harmony參數來開啟這個語法的解析
Custom HTML Attributes
如果你要帶入的 properties 並不是標準的 HTML 規格, React 並不會把它 render 出來. 如果你想使用自訂的 attribute, 你應該在前綴加上 data-:
1 | <div data-custom-attribute="foo" /> |
Web Accessibility 的 attributes 前綴為 aria- 將會被 render
1 | <div aria-hidden={true} /> |