---
# System prepended metadata

title: "\U0001F3C5 Day 17 -React 基礎練習 (2) - JSX 屬性練習"
tags: [React 直播班 - 2025 冬季班]

---

# 🏅 Day 17 -React 基礎練習 (2) - JSX 屬性練習

在撰寫 React 會大量使用到 JSX 的部分，除了基本的樣板以外，今天也持續介紹常見的 JSX 使用，一起來練習看看吧！
### JSX 最外層只能有一個根元件
一個元件不能返回多個元素，就像一個函數不能返回多個值一樣。
錯誤示範：
```jsx=
const element = <h2> Hello！</h2><h2> 你好！</h2>
```
正確示範：
```jsx=
const element = <div><h2> Hello！</h2><h2> 你好！</h2></div>
```

### JSX 中的 class
在 JSX 同樣可以加入 class 來指定樣式，但要注意屬性名稱需改為 className。
例如：
```jsx=
const element = <div className="card"><h2> Hello！</h2><h2> 你好！</h2></div>
```

### JSX 中的屬性代入
在 JSX 中需要被視為 JavaScript 處理的部分，都需要使用大括號 {} 包住。
例如：
```jsx=
const imgUrl = "https://i.pravatar.cc/150?img=38";
<img src={imgUrl} />
```

### JSX 中的 style
在 JSX 中使用 style 設定樣式，需在大括號內使用物件的方式設定，物件內的樣式屬性用駝峰命名法（camelCase）撰寫。

例如：
```jsx=
const element = <div style={
  {
    backgroundColor: 'black',
    color: 'white'
  }
 }>
    <h2> Hello！</h2><h2> 你好！</h2>
</div>
```

### JSX 中的 for
在 JSX 中使用到 for 屬性時，需注意要將屬性名稱改為 htmlFor。
例如：
```jsx=
<label htmlFor="firstName">名字：</label>
<input id="firstName" type="text"/>
```

## 題目

### 練習一
請複製 （右下角 fork）這個[範例](https://codepen.io/yen-kg/pen/OJKZvLr?editors=1011)，利用 products 中的資料撰寫 JSX 完成以下畫面：
<img src="https://hackmd.io/_uploads/H1ppnAlbkx.png" width="300"/>

### 練習二
請複製 （右下角 fork）這個[範例](https://codepen.io/yen-kg/pen/xxvjWEL?editors=1010)，並撰寫 JSX 完成以下畫面：
![](https://hackmd.io/_uploads/SkeEMxuj3.png)

備註：
- 畫面需求的 HTML 格式結構可以參考 HTML 中的註解。


<!-- 解答： 
練習一：
```
// 練習區塊
const element = (
  <div className="card mb-3">
    <img 
      src={products[0].imageUrl} 
      className="card-img-top primary-image" 
      alt="主圖" 
    />
    <div className="card-body">
      <h5 className="card-title">
        {products[0].title}
        <span className="badge bg-primary ms-2">{products[0].category}</span>
      </h5>
      <p className="card-text">商品描述：{products[0].description}</p>
      <p className="card-text">商品內容：{products[0].content}</p>
      <div className="d-flex">
        <p className="card-text text-secondary">
          <del>{products[0].origin_price}</del>
        </p>
        元 / {products[0].price} 元
      </div>
    </div>
  </div>
);
// 區塊結束
```
練習二：
```
// 練習區塊
const element = <form  className="p-4" style={{
          background: "url('https://images.unsplash.com/photo-1600303881706-b8a373dc73c3?ixlib=rb-4.0.3&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D&auto=format&fit=crop&w=1170&q=80') no-repeat",
          backgroundSize: "cover"
        }}>
  <div className="mb-3">
    <label htmlFor="email" className="form-label">Email address</label>
    <input type="email" className="form-control" id="email"/>
  </div>
  <div className="mb-3">
    <label htmlFor="password" className="form-label">Password</label>
    <input type="password" className="form-control" id="password"/>
  </div>
  
  <button type="submit" className="btn">Submit</button>
</form>;
// 區塊結束
```
-->

| Column 1 | Column 2 | 
| -------- | -------- |
| Jin |[Codepen](https://codepen.io/Jin-L/pen/myEPdOR)|
| cks40660 |[練1](https://codepen.io/CKS40660/pen/ByzKapw) , [練2](https://codepen.io/CKS40660/pen/VYjawWj)|
| Eileen |[練1](https://codepen.io/Eileen-io/pen/zxBqxGq) , [練2](https://codepen.io/Eileen-io/pen/gbMrbrj)|
| Nooooora | [練習一](https://codepen.io/Nora-Ch/pen/LEZNEzO?editors=1111) , [練習二](https://codepen.io/Nora-Ch/pen/LEZNEgd)|
| 地瓜 |[Codepen](https://codepen.io/ChippyYU/pen/RNRawEL?editors=1111)|
| Chia |[Codepen](https://codepen.io/Chia-the-encoder/pen/LEZNYXR)|
| Marco |[Codepen](https://codepen.io/MarcoChiu/pen/PwzNwXv)|
| 7Red |[練習一](https://codepen.io/cch2655/pen/yyJONJb), [練習二](https://codepen.io/cch2655/pen/yyJONVX)
| 老屠 |[練習一](https://codepen.io/fsgfxvlb-the-selector/pen/PwzNqNo?editors=0011), [練習二](https://codepen.io/fsgfxvlb-the-selector/pen/qENZdNM)|
| Tetsu | [練習一](https://codepen.io/ttgchang/pen/ogLxgBG), [練習二](https://codepen.io/ttgchang/pen/yyJONXo)|
| jchunnn | [練習一](https://codepen.io/jchunnn/pen/qENZBeR?editors=1111), [練習二](https://codepen.io/jchunnn/pen/JoKXogv?editors=1010)|
| Owen He | [練習一](https://codepen.io/owen1120/pen/bNepdvB?editors=1011), [練習二](https://codepen.io/owen1120/pen/PwzNqxz?editors=1010)|
| 舜仁 | [練習一](https://codepen.io/shunjen/pen/VYjaLOY), [練習二](https://codepen.io/shunjen/pen/EayKVWq)|
| ROGAN | [練習一](https://codepen.io/RoganHsu/pen/JoKXdRa?editors=1011), [練習二](https://codepen.io/shunjen/pen/EayKVWq)|
| RUDY | [練習一](https://codepen.io/Rudy-crw/pen/OPXNJdZ?editors=1010), [練習二](https://codepen.io/Rudy-crw/pen/JoKXYmX?editors=0010)|
| andy | [練習一](https://codepen.io/ewnblckz-the-styleful/pen/emzZJov?editors=0010), [練習二](https://codepen.io/ewnblckz-the-styleful/pen/zxBqqxP?editors=1010)|
| KOMATSU PEI | [練習一](https://codepen.io/Komatsu2021/pen/WbxwNXy?editors=1011), [練習二](https://codepen.io/Komatsu2021/pen/NPrNWwM?editors=1011)|
| Melanie | [練習一](https://codepen.io/pnrcspte-the-animator/pen/MYeyaGR), [練習二](https://codepen.io/pnrcspte-the-animator/pen/ogLxxPR)|
| Jenna | [練習一](https://codepen.io/abiscc14/pen/RNRaRNa), [練習二](https://codepen.io/abiscc14/pen/WbxwxbX)|
| cindy |[練習一](https://codepen.io/a50134/pen/azZNZxd?editors=1011), [練習二](https://codepen.io/a50134/pen/emzZzPq?editors=1010)
| 7lun |[練習一](https://codepen.io/mfyvqhsn-the-bold/pen/vEKGXOW?editors=0010), [練習二](https://codepen.io/mfyvqhsn-the-bold/pen/vEKGXKd?editors=1010)
| 小懿 |[練習一](https://codepen.io/YT-the-vuer/pen/QwENEzJ?editors=0010), [練習二](https://codepen.io/YT-the-vuer/pen/JoKXKqK?editors=1011)
| Antonio |[練習一](https://codepen.io/gwhvusel-the-builder/pen/dPXMPNZ), [練習二](https://codepen.io/gwhvusel-the-builder/pen/xbOVbLr)
| FangFang |[練習一](https://codepen.io/Fang-the-selector/pen/ogLxzyE?editors=1111), [練習二](https://codepen.io/Fang-the-selector/pen/bNepBwE?editors=1010)
| Percy |[練習一](https://codepen.io/Percy-Ku/pen/QwENGmp), [練習二](https://codepen.io/Percy-Ku/pen/pvbyNLr)
| 平平 |[練習一](https://codepen.io/ypinpin/pen/ZYOWpoO), [練習二](https://codepen.io/ypinpin/pen/NPrNRQq)
| Miikaa |[練習一](https://codepen.io/Miikaa/pen/KwMzaJJ), [練習二](https://codepen.io/Miikaa/pen/vEKGgvZ)| 
| 登登登 |[練習一](https://codepen.io/Duncanin/pen/qENZrOR?editors=0010), [練習二](https://codepen.io/Duncanin/pen/GgqZWjG?editors=0010)
| kashiwatei |[Codepen](https://codepen.io/kashiwatei/pen/QwENdJZ?editors=0011)
| 社子畢卡索 |[練習一](https://codepen.io/pen?template=ByzKWVE), [練習二](https://codepen.io/pen?template=ByzKWMg)
| wind |[練習一](https://codepen.io/wind7y/pen/emzZRLw), [練習二](https://codepen.io/wind7y/pen/zxBqzmY)| 
| kuolun |[練習一](https://codepen.io/kuolun/pen/NPrNYZL), [練習二](https://codepen.io/kuolun/pen/PwzNeWB)| 
| 星雪糖 |[練習一](https://codepen.io/vfpofbgm-the-scripter/pen/LEZNmEx?editors=1011), [練習二](https://codepen.io/vfpofbgm-the-scripter/pen/dPXMePW?editors=0010)| 
| Leonard |[練習一](https://codepen.io/hyyfjqra-the-sans/pen/MYeyqQw?editors=0011), [練習二](https://codepen.io/hyyfjqra-the-sans/pen/dPXMqKd?editors=0010)|
| ZoeKang | [練習一](https://codepen.io/byehywmx-the-animator/pen/azZNRQR), [練習二](https://codepen.io/byehywmx-the-animator/pen/WbxwaWj)|
| 蛋白 | [練習一商品小卡](https://codepen.io/sjlu-0/pen/qENZgoQ), [練習二登入畫面](https://codepen.io/sjlu-0/pen/ByzKMxj)|
| Eric | [練習一](https://codepen.io/wc-su/pen/raLLBGY) , [練習二](https://codepen.io/wc-su/pen/RNRRbLm) |
| Wafa | [練習一](https://codepen.io/dqricwgo-the-reactor/pen/JoKKXwe?editors=1011) , [練習二](https://codepen.io/dqricwgo-the-reactor/pen/gbMMMog?editors=1010) |
| JiaMori | [練習一](https://codepen.io/jiamori/pen/RNRRjaP) , [練習二](https://codepen.io/jiamori/pen/myEEqqE) |
| Vergil | [練習一](https://codepen.io/aglgvsie/pen/ZYOBjwx) , [練習二](https://codepen.io/aglgvsie/pen/LEZbJXN) |
| tanuki | [練習一](https://codepen.io/tanuki320/pen/wBWgzrq?editors=0111) , [練習二](https://codepen.io/tanuki320/pen/VYjPmqQ?editors=0010) |
|TWLeoC|[練習一](https://codepen.io/TWLeoC/pen/QwEgYqO?editors=1111) , [練習二](https://codepen.io/TWLeoC/pen/pvbwGWL?editors=1011)|
|伊迪|[練習一](https://codepen.io/sorryFish/pen/dPXRrJW) , [練習二](https://codepen.io/sorryFish/pen/ZYOyPRY)|
|小趴|[Codepen](https://codepen.io/papa2415/pen/XJKadRP)|
|Wen|[練習一](https://codepen.io/hsiao-kevin/pen/yyJPMMd?editors=1011) , [練習二](https://codepen.io/hsiao-kevin/pen/yyJPMom?editors=1010)|