# JS 型別與 JSX 補充資料: [介紹JSX](https://zh-hant.legacy.reactjs.org/docs/introducing-jsx.html) [Day 08 - JSX 的重要特性與規則以及其背後緣由](https://ithelp.ithome.com.tw/m/articles/10296741) --- ### JSX 本身也是 Expression 在編譯之後,JSX expressions 就變成了一般的 JavaScript function 呼叫並回傳 JavaScript 物件。 這表示你也可以在 if 跟 for 迴圈中使用 JSX,將其指定到一個變數,使用 JSX 作為參數並由 function 中回傳。 ```javascript= function getGreeting(user) { if (user) { return <h1>Hello, {formatName(user)}!</h1>; } return <h1>Hello, Stranger.</h1>; } ``` ### 在 JSX 中指定屬性 使用 **引號** 將字串設定為屬性: ```javascript= const element = <a href="https://www.reactjs.org"> link </a>; ``` 也可以在屬性中使用 **大括號** 來嵌入一個 JavaScript expression: ```javascript= const element = <img src={user.avatarUrl}></img>; ``` ### JSX 表示物件 Babel 將 JSX 編譯為呼叫 **React.createElement()** 的程式。 ```javascript= const element = ( <h1 className="greeting"> Hello, World! </h1> ); ``` ```javascript= const element = React.createElement( 'h1', {className: 'greeting'}, //屬性 'Hello, World!' ); ``` ### Rendering JSX ```javascript= import React from 'react'; import { createRoot } from 'react-dom/client'; // Copy code here: const container = document.getElementById('app'); const root = createRoot(container); root.render(<h1>Hello world</h1>); ``` ### 嚴格標籤閉合 在 JSX 中則所有元素都一定要寫閉標籤,即使 children 是空的,否則 JSX transformer 會轉譯失敗 ```javascript= <img src="./image.jpg" class="foo-image"></img> <input type="text" name="email"></input> // Fine in JSX: <br /> // NOT FINE AT ALL in JSX: <br> ``` children 為空的元素可以用自我閉合標籤作為簡寫,與上面的寫法等價 ```javascript= <img src="./image.jpg" class="foo-image" /> <input type="text" name="email" /> ``` ### .map in JSX 簡單: ```javascript= const strings = ['Home', 'Shop', 'About Me']; const listItems = strings.map(string => <li>{string}</li>); <ul>{listItems}</ul> ``` 進階: ```javascript= import React from 'react'; import { createRoot } from 'react-dom/client'; const container = document.getElementById('app'); const root = createRoot(container); const people = ['Rowe', 'Prevost', 'Gare']; const peopleList = people.map((person,i) => // expression goes here: <li key={'person_' + i}>{person}</li> ); // root.render goes here: root.render(<ul>{peopleList}</ul>); ```
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up