[note] JSX
- JSX 元素的最外層,必須只能有一個根元件。
- 在 JSX 中,所有自關閉標籤(self-closing tag)必須在最後加上
/
,例如,<br />
。 - 在 JSX 中,若要為元素代入樣式,需使用
className
屬性,例如,<div className="foobar">
。 - 任何在 JSX 中的元素都會被視為 JSX,而非平常的 JavaScript,因此若在 JSX 元素中使用 JavaScript,會被當作字串直接輸出,若希望該段內容被當作 JavaScript 處理,需使用大括號
{}
包住。
代入 class 樣式
使用關鍵字 className
:
const container = <div className="container">Hello</div>;
代入行內樣式(inline style)
使用 {% raw %} {{ }} {% endraw %}
即可代入行內樣式,外面的大括號是一般在 React 中,用來告訴 JSX 這個部分裡面的內容是 JavaScript;第二個大括號比較的是物件所用的 { }
,所以實質上就是把一個物件代到 style
屬性內:
import React from 'react';
import ReactDOM from 'react-dom';
const styleMe = (
<h1 style={{ background: 'lightblue', color: 'darkred' }}>Please style me! I am so bland!</h1>
);
const root = ReactDOM.createRoot(document.getElementById('app'));
root.render(styleMe);
另一種常見的方式則是定義一個名為 style
的變數,然後再把它插入到 JSX 的元素中,由於使用的是 JavaScript 的模組,因此除非你在模組內把該變數匯出(export),否則同樣名稱的變數並不會衝突:
import React from 'react';
import ReactDOM from 'react-dom';
const styles = {
background: 'lightblue',
color: 'darkred',
fontSize: 20, // 等同於 20px
marginTop: '60px',
};
const styleMe = <h1 style={styles}>Please style me! I am so bland!</h1>;
const root = ReactDOM.createRoot(document.getElementById('app'));
root.render(styleMe);
在 React 中,多數的樣式如果沒有點寫單位,預設會自己幫你帶
px
,完整支援的清單可在這裡檢視。