iT邦幫忙

2022 iThome 鐵人賽

0
自我挑戰組

30 天線上自學前端系列 第 31

[Day 31] [React] JSX 屬性(attributes)& styling React Elements 簡單介紹

  • 分享至 

  • xImage
  •  

在 JavaScript 檔案裡面,想在 ReactDOM.render 裡面引用 CSS 檔案裡的語法就跟之前學到的一樣:

ReactDOM.render(
    <h1 class="heading">My Favourite Foods</h1>
);

在這個狀況下,網頁顯示不會有問題,因為 React 有在背後先幫你處理過,不過如果開啟 chrome console 看就會發現有報錯:

Warining: Invalid DOM property class. Did you mean className ?

在 JavaScript 裡面,可以讀取所有屬性(Property)的正確語法是 className。所以在這邊改成 className 就可以讓報錯消失了。

不過現在還有另一個報錯:

Uncaught SyntaxError: Unexpected token <

點進去查看會發現問題出在 JavaScript 檔案裡面的第一行:

原因是瀏覽器不知道這個 JavaScript 檔案其實是一個裡面包含了 HTML 的 elements 的 JSX 檔案,而不是一個標準的 JavaScript 檔案。

如果想要把這個錯誤改掉,可以在 HTML 檔案裡面,把引用的 script 的 類型 從 Javascript 改成 JSX 就可以了:

  <body>
    <div id="root"></div>
    <script src="../src/index.js" type="text/JSX"></script>
  </body>

同樣圖片也可以做相同的設定。

ReactDOM.render 插入圖片的語法會是這樣:

<img src="https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/delish-190621-air-fryer-bacon-0035-landscape-pf-1567632709.jpg?crop=0.645xw:0.967xh;0.170xw,0.0204xh&resize=480:*"/>

而我們想用 CSS 來控制圖片大小,我們要先在 CSS 檔案裡面設定好期望的圖片大小:

.food-img {
  height: 100px;
  width: 100px;
}

接下來再回頭到 ReactDOM.render 插入圖片的語法裡:

<img className="food-img" src="https://hips.hearstapps.com/hmg-prod.s3.amazonaws.com/images/delish-190621-air-fryer-bacon-0035-landscape-pf-1567632709.jpg?crop=0.645xw:0.967xh;0.170xw,0.0204xh&resize=480:*"/>

再來課程介紹了這個網站 https://picsum.photos/ ,他可以用特定網址來產生隨機圖片,也可以設定好圖片想要的大小。

https://ithelp.ithome.com.tw/upload/images/20221001/20151588rScxx6wjVD.png

要把上圖網址加入 ReactDOM.render ,第一步是可先用一個變數把網址放好:

const img = "https://picsum.photos/200";

然後到 ReactDOM.render 裡面,放上這個變數:

<img src={img} />

最後是在 SandBox 裡面會看到像這樣的錯誤:

img elements must have an alt prop, either with meaningful text, or an empty string for decorative images. (jsx-a11y/alt-text)

原因是在 <img> 裡面沒有設定好 alt 的屬性(attribute)。

    <img
      className="food-img"
      alt="jamon"
      src="https://images-na.ssl-images-amazon.com/images/I/71lNrnbMXsL._SL1200_.jpg"
    />

設定好之後,就不會再報同樣的錯誤了。


上一篇
[Day 30] [React] JavaScript expression 在 JSX 的小練習
下一篇
[Day 32] [React] React 行內樣式 (Inline styles)
系列文
30 天線上自學前端72
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言