React基礎篇-02.JSX簡介
JSX 簡介
請觀察下面的變數宣告:
const element = <h1>Hello, world!</h1>;
這種看起來可能有些奇怪的標籤語法既不是字串也不是HTML。
它被稱為 JSX, 一種 JavaScript 的語法擴充套件。 我們推薦在 React 中使用 JSX 來描述使用者介面。JSX 乍看起來可能比較像是模版語言,但事實上它完全是在 JavaScript 內部實現的。
JSX 用來宣告 React 當中的元素。在下一個章節裡面我們會詳細介紹元素是如何被渲染出來的,接下來呢,我們先來看看 JSX 的基本使用方法。
在 JSX 中使用表示式
你可以任意地在 JSX 當中使用 JavaScript 表示式,方法是,將表示式包含在大括號 {}
裡。
例如 2 + 2
, user.firstName
, 以及 formatName(user)
都是有效的表示式。
function formatName(user) {
return user.firstName + ` ` + user.lastName;
}
const user = {
firstName: `Harper`,
lastName: `Perez`
};
const element = (
<h1>
Hello, {formatName(user)}!
</h1>
);
ReactDOM.render(
element,
document.getElementById(`root`)
);
我們書寫 JSX 的時候一般都會帶上換行和縮排,這樣可以增強程式碼的可讀性。與此同時,我們同樣推薦在 JSX 程式碼的外面擴上一個小括號,這樣可以防止 分號自動插入 的bug.
JSX 本身其實也是一種表示式
在編譯之後呢,JSX 其實會被轉化為普通的 JavaScript 物件。
這也就意味著,你其實可以在 if
或者 for
語句裡使用 JSX,將它賦值給變數,當作引數傳入,作為返回值都可以:
function getGreeting(user) {
if (user) {
return <h1>Hello, {formatName(user)}!</h1>;
}
return <h1>Hello, Stranger.</h1>;
}
JSX 屬性
你可以使用引號 ""
來指定字串為屬性的值:
const element = <div tabIndex="0"></div>;
也可以使用大括號 {}
嵌入 JavaScript 表示式來作為屬性的值:
const element = <img src={user.avatarUrl}></img>;
使用大括號包裹的 JavaScript 表示式時,不要再外面使用引號。否則,JSX 會將引號當中的內容識別為字串而不是表示式。
JSX 巢狀
如果 JSX 標籤是閉合式的,那麼你需要在結尾處用 />
,就好像 XML 一樣:
const element = <img src={user.avatarUrl} />;
JSX 標籤可以有子標籤:
const element = (
<div>
<h1>Hello!</h1>
<h2>Good to see you here.</h2>
</div>
);
警告:
因為 JSX 的特性更接近 JavaScript 而不是 HTML , 所以 React DOM 使用
camelCase
小駝峰命名 來定義屬性的名稱,而不是使用 HTML 的屬性名稱。
JSX 防注入攻擊
你可以放心地在 JSX 當中使用使用者輸入:
const title = response.potentiallyMaliciousInput;
// 這是安全的:
const element = <h1>{title}</h1>;
預設情況下,React DOM 在渲染前會 轉義 嵌入在 JSX 中的任何值。因此,可以確保你的應用不會被注入攻擊。所有的內容在渲染之前都被轉換成了字串。這樣可以有效地防止 XSS(跨站指令碼) 攻擊。
JSX 代表 Objects
Babel 直譯器會把 JSX 轉換成一個名為 React.createElement()
的方法去呼叫。
下面兩段程式碼的作用其實是相同的:
const element = (
<h1 className="greeting">
Hello, world!
</h1>
);
const element = React.createElement(
`h1`,
{className: `greeting`},
`Hello, world!`
);
React.createElement()
這個方法首先會執行一些檢查,以幫助您編寫無錯誤的程式碼,之後會返回一個類似下面的物件:
// 注意: 以下示例是簡化過的(不代表在 React 原始碼中是這樣)
const element = {
type: `h1`,
props: {
className: `greeting`,
children: `Hello, world`
}
};
這樣的物件被稱為 “React 元素”。你可以將其視為你想要在螢幕上看到的東西。React 通過讀取這些物件來構建 DOM 並保持資料內容一致。
我們將在下一個章節當中介紹更多有關 React 元素 是如何渲染成 DOM 的內容。
**Tip:**
如果你是在使用本地編輯器編寫 JSX 程式碼的話,推薦你去裝一個支援 JSX 高亮的外掛,這樣更方便之後的開發學習。
小結
React 使用 JSX 來替代常規的 JavaScript。
JSX 是一個看起來很像 XML 的 JavaScript 語法擴充套件。
我們不需要一定使用 JSX,但它有以下優點:
- JSX 執行更快,因為它在編譯為 JavaScript 程式碼後進行了優化。
- 它是型別安全的,在編譯過程中就能發現錯誤,並且防注入攻擊。
- 使用 JSX 編寫模板更加簡單快速。
相關文章
- React基礎篇1React
- React基礎篇2React
- React Hooks教程之基礎篇ReactHook
- JavaScript基礎簡介JavaScript
- React 應用實踐(基礎篇)React
- JavaFX基礎:1: 簡介Java
- Oracle基礎工具簡介Oracle
- 基礎篇-http協議《http 簡介、url詳解、request》HTTP協議
- 簡單易懂KVC基礎篇
- CSS基礎知識簡介CSS
- Spring AOP基礎簡介Spring
- maven簡介及基礎使用Maven
- Xtrabackup介紹和使用【基礎篇】
- GOLANG簡介與基礎語法Golang
- web workers簡介(一)基礎使用Web
- iptables基礎原理和使用簡介
- C語言基礎-C簡介C語言
- 《MySQL 8 DBA基礎教程》簡介MySql
- CSS基礎:CSS變數簡介CSS變數
- d3-系列-基礎簡介
- React基礎React
- 讓react用起來更得心應手——(React 基礎簡析)React
- C#基礎程式設計——簡介及基礎語法C#程式設計
- python基礎學習-socket簡介Python
- scrapy框架簡介和基礎應用框架
- TypeScript基礎入門-函式-簡介TypeScript函式
- JAVA基礎之六-Stream(流)簡介Java
- Java基礎知識篇——Java基本介紹Java
- React-hooks 簡介ReactHook
- react draft api 簡介ReactRaftAPI
- React 基礎_元件React元件
- React路由(基礎)React路由
- React基礎(一)React
- React筆記:React基礎(2)React筆記
- React基礎及React專案React
- 【Python基礎知識】Django框架簡介PythonDjango框架
- 【機器學習基礎】半監督學習簡介機器學習
- 圖資料庫基礎簡介 -KDnuggets資料庫