[官網學 React] Docs:介紹 JSX
網址(英文):https://reactjs.org/docs/introducing-jsx.html
網址(中文):https://zh-hant.reactjs.org/docs/introducing-jsx.html
JSX 的宣告方式如以下:
它不是字串,也不是 HTML,它是 JSX。
JSX 是 JavaScript 的語法擴充,官網建議在 React 使用 JSX 編寫使用者介面(UI)的樣貌。
JSX 看起來像樣板語言(template language),但 JSX 能使用 JavaScript 所有的功能。
JSX 產生 React 的 HTML 元素(elements),在下一篇將會探索和渲染 JSX 到 DOM 上,這篇則著重在介紹 JSX 的基礎。
為何用 JSX
因為渲染的邏輯先天要跟 UI 的邏輯綁在一起:事件如何處理、狀態(state)隨著時間會如何改變、還有資料要如何顯示。
所以 React 將標籤語法(markup)和邏輯放在一起,共同放在一個組件(component)裡,而組件與組件之間互相獨立。
簡而言之就是:原本的 HTML 和 JavaScript 是分成兩個檔案,用語法做區隔,而在 React 是用組件做區隔。
不過 React 並不一定要用 JSX 的方式來編寫,只是大部分的人發現這對在 JavaScript 程式碼中處理 UI 很有幫助。
JSX 也讓 React 能秀出更多有用的錯誤和警告資訊。
在 JSX 嵌入表達式
當需要用到 JavaScript 表達式,都使用花刮(curly braces)包住表達式即可:
JSX 也是表達式
在編譯(compilation)後,JSX 表達式變成能讓 JavaScript 函式回傳的物件。
除了可以放進判斷式裡,還可以將 JSX 表達式 assign 給變數。
在 JSX 指定屬性
*由於 JSX 較接近 JavaScript,所以命名方式也是以駝峰命名法(camelCase),不是像 HTML 的命名方法
*class 變成 className
*tabindex 變成了 tabIndex
包含 Children
如果標籤(tag)內是空的,可以直接用 />
關閉此標籤:
JSX 有預防注入攻擊
在預設下,React DOM 在渲染前會先將所有嵌入在 JSX 中的值轉譯成字串,因此能確保永遠不會注入任何沒有明確寫在應用程式的東西。
這可以避免 XSS(跨網站指令碼) 攻擊。
JSX 代表的是物件
Babel 將 JSX 編譯為呼叫 React.createElement()
的程式。
以下兩個例子等價:
React.createElement()
進行一些幫助你寫出沒有 bug 的程式的檢查,但基本上它會產生類似下面的物件:
這些物件被稱為 React 元素(React elements),可以將它們想成是我們想在螢幕上看到的東西的敘述式。
React 讀取這些物件,使用這些物件去建構 DOM,並確保他們在最近的狀態。