【React 學習】認識元件 Component

閱讀時間約 6 分鐘

元件 (Component) 是 React 的核心概念,不同的元件組成 UI,有點像拼樂高一樣。以往我們都說 HTML 是網頁的架構,再搭配 CSS 進行美化以及 JavaScript 添加互動功能,而 React 會將這些 HTML、CSS、JavaScript 組合成客製化的原件,小則按鈕、導覽列;大則整個網頁也能當成元件。

那元件能帶來什麼好處?

想像一下,一個部落格網站有成千上萬篇文章,而這些文章都有 UI 幾乎相同的目錄,如果把目錄獨立成元件,是不是便於管理和重複使用呢?

只要定義出一個元件,就可以用在其他不同的地方。

定義元件

React 說到底就是個 JavaScript 的函式庫......或框架,所以每個元件都是 JavaScript 函式,函式裡面再帶入 HTML。再次注意這一切都在 JavaScript 運作,所以函式不會回傳單純的 HTML,而是 React 所提供的 JSX

JSX 是 JavaScript 的語法擴充 (extension),目的誠如上述,為了讓我們在 JavaScript 檔案編寫近似 HTML 的標記 (markup)。補充一下,雖然 React 和 JSX 時常一起出現,但兩者彼此間是獨立的,也就是說,我們不用 JSX 也能寫 React,而 JSX 可以用在 React 以外的其他地方。

舉個 React 官網的例子逐步說明:

export default function Profile() {
return (
<img
src="https://i.imgur.com/MK3eW3Am.jpg"
alt="Katherine Johnson"
/>
)
}


一、匯出元件

透過關鍵字 export 來匯出元件,這是 JavaScript 的原生功能,並非 React 專屬的。至於 default 則代表匯出的東西,是這一份檔案的主要內容,使用 default 匯出,在別份檔案 import 時就可以使用任意名稱,無須遵循匯出時的內容名稱。每個檔案都只能有一個 export default,詳情可以參考:

二、定義函式

我們把函示名稱定為 Profile,務必注意,React 元件雖然是 JavaScript 函式,但名稱開頭一定要大寫!若是小寫開頭,React 會試圖以 HTML 標記處理,而不會產生元件。


三、帶入標記

函式要回傳 JSX,所以 return 後面接上元件的 HTML 標記,如果全部內容塞成一行,可以不用包在小括號裡面,多行的話就需要。為了避免誤會,我覺得還是都用小括號包覆比較安全。

return (
<div>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</div>
);



使用元件

前面提過元件的最大優勢在於重複利用。現在讓我們把元件嵌入在另一個元件裡面。

function Profile() {
return (
<img
src="https://i.imgur.com/MK3eW3As.jpg"
alt="Katherine Johnson"
/>
);
}

export default function Gallery() {
return (
<section>
<h1>Amazing scientists</h1>
<Profile />
<Profile />
<Profile />
</section>
);
}


非常淺顯易懂,我們在 Gallery 元件當中嵌入三個 Profile 元件,然後匯出 Gallery。但要特別注意,元件被嵌入到其他元件的 JSX 中,還是要維持開頭字母大寫以利 React 區分一般的 HTML 標記和元件。

在這樣的語境下,Gallery 視為父層元件 (parent component),而 Profile 則是子層元件 (child component),與 HTML 的巢狀結構如出一轍。但瀏覽器畢竟不懂 JSX,所以最終還是要編譯成 HTML 才能渲染到瀏覽器上。上述程式碼會被轉為以下 HTML:

<section>
<h1>Amazing scientists</h1>
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
<img src="https://i.imgur.com/MK3eW3As.jpg" alt="Katherine Johnson" />
</section>


⛑️ 還有一件事情需要注意,雖然 ProfileGallery 的子層元件,但千萬不要把它的定義函式寫在父層元件內!元件請獨立分開定義

18會員
34Content count
Bonjour à tous,我本身是法文系畢業,這邊會刊登純文組學習網頁開發的筆記。如果能鼓勵更多文組夥伴一起學習,那就太開心了~
留言0
查看全部
發表第一個留言支持創作者!
蕭宇廷的沙龍 的其他內容
記錄了前端框架的學習原因、使用好處以及注意事項。
電商網站切版連結: https://codepen.io/XavierHSIAO/pen/qBgvQyw
CSS Grid 基礎學習筆記第二彈
紀錄 CSS Grid 的基礎用法。
初階入門的 media query 筆記,中間也談到了 RWD 與 Mobile First 設計原則。
記錄了前端框架的學習原因、使用好處以及注意事項。
電商網站切版連結: https://codepen.io/XavierHSIAO/pen/qBgvQyw
CSS Grid 基礎學習筆記第二彈
紀錄 CSS Grid 的基礎用法。
初階入門的 media query 筆記,中間也談到了 RWD 與 Mobile First 設計原則。
你可能也想看
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
React 表單驗證是一種技術與使用者體驗的設計,讓使用者能夠即時檢查輸入的資料並修正,提升使用者的使用體驗,並確保資料的正確性。
Thumbnail
前言 嗨,各位懷舊遊戲愛好者!今天要跟大家分享一個有趣的主題:如何利用React和Pixi.js這兩大神兵利器,重塑我們那個年代的經典紅白機打磚塊遊戲! 先跟大家簡單科普一下,React是一個超級火爆的前端框架,能讓我們輕鬆創建可重用的UI組件,組件間的狀態管理也相當方便。。。
Thumbnail
動態導覽列為增加使用者經驗UX,要如何在Tailwind CSS上實現呢?這次JayLin來帶大家做一個動態導覽列(Animation Navigation)
Thumbnail
Todo App是一個很好學習程式語言的專案開始,JayLin來帶大家手把手用TypeScript | React | TailwildCSS 來做一個小專案
Thumbnail
想要知道如何用最新技術來製作一個App嗎? 跟著JayLin用React | Redux Tool Kit | TypeScript | TailwildCSS 來製作一個Drawing App
Thumbnail
瑞士作為歐洲的非歐盟國家,並未直接採用歐盟REACH法規,但是其化學品管理條例ChemO很大程度上借鑒了歐盟的REACH和CLP法規。可以說,瑞士ChemO合規和歐盟REACH息息相關。
Thumbnail
React Hook onclick call a callback function with params, and change css style example: 本筆記參考: 1. https://www.codegrepper.com/code-examples/javascrip
Thumbnail
接續上一篇,navbar元件其實寫的不是很好,還不能說是可真正reuse,我們把程式改成這樣,透過props傳入navbar的items,定義好navbar title, li的href/name/active等等,就可以達到navbar元件無須改code就能重用的目的! Navbar 元件中用m
Thumbnail
接續上一篇,這邊要來寫一個React hello world app,最後安裝webpack-dev-server來提升開發效率。 使用npm安裝react, react-dom: $ npm install react react-dom --save dependencies下紀錄的是生產環境會
Thumbnail
React開發有兩種方式,一種是使用CDN方式include react的官方lib,然後使用babel來將JSX編譯成瀏覽器看得懂的javascript。 但是在react中還會使用到sass, scss等等,還需要額外編譯成css瀏覽器才看得懂。 而webpack的誕生,就是為了解決上述的問題,
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
React 表單驗證是一種技術與使用者體驗的設計,讓使用者能夠即時檢查輸入的資料並修正,提升使用者的使用體驗,並確保資料的正確性。
Thumbnail
前言 嗨,各位懷舊遊戲愛好者!今天要跟大家分享一個有趣的主題:如何利用React和Pixi.js這兩大神兵利器,重塑我們那個年代的經典紅白機打磚塊遊戲! 先跟大家簡單科普一下,React是一個超級火爆的前端框架,能讓我們輕鬆創建可重用的UI組件,組件間的狀態管理也相當方便。。。
Thumbnail
動態導覽列為增加使用者經驗UX,要如何在Tailwind CSS上實現呢?這次JayLin來帶大家做一個動態導覽列(Animation Navigation)
Thumbnail
Todo App是一個很好學習程式語言的專案開始,JayLin來帶大家手把手用TypeScript | React | TailwildCSS 來做一個小專案
Thumbnail
想要知道如何用最新技術來製作一個App嗎? 跟著JayLin用React | Redux Tool Kit | TypeScript | TailwildCSS 來製作一個Drawing App
Thumbnail
瑞士作為歐洲的非歐盟國家,並未直接採用歐盟REACH法規,但是其化學品管理條例ChemO很大程度上借鑒了歐盟的REACH和CLP法規。可以說,瑞士ChemO合規和歐盟REACH息息相關。
Thumbnail
React Hook onclick call a callback function with params, and change css style example: 本筆記參考: 1. https://www.codegrepper.com/code-examples/javascrip
Thumbnail
接續上一篇,navbar元件其實寫的不是很好,還不能說是可真正reuse,我們把程式改成這樣,透過props傳入navbar的items,定義好navbar title, li的href/name/active等等,就可以達到navbar元件無須改code就能重用的目的! Navbar 元件中用m
Thumbnail
接續上一篇,這邊要來寫一個React hello world app,最後安裝webpack-dev-server來提升開發效率。 使用npm安裝react, react-dom: $ npm install react react-dom --save dependencies下紀錄的是生產環境會
Thumbnail
React開發有兩種方式,一種是使用CDN方式include react的官方lib,然後使用babel來將JSX編譯成瀏覽器看得懂的javascript。 但是在react中還會使用到sass, scss等等,還需要額外編譯成css瀏覽器才看得懂。 而webpack的誕生,就是為了解決上述的問題,