這篇筆記主要整理自:官方文件 Your First Component
可以想像成「建立起 UI 的積木」,在程式碼裡面就是一個 coding block。
在初學 HTML、CSS、JS 我們是分開處理結構、樣式、邏輯功能,現在 React 讓我們能把 markup、styles、JS 全部包在 component 中。
有三種寫法:createClass、class component、function component
根據這篇文章 createClass 的寫法在 React v16 之後不再支援,而目前官方文件主要說明的創建方式為 function component,以下也只針對 function component 做說明。(但以下步驟未必要照順序!理解整個操作後就照自己喜歡的來就好)
以下情境為創建按鈕元件:
function Button(){
return;
}
function Button(){
return;
}
export default Button;
function Button(){
return <button>click</button>;
}
export default Button;
function Button(){
return (
<button>click</button>
);
}
export default Button;
React Component 是一個可以撰寫 markup、styles、JS 的 JavaScript Funciton
相信大家有發現,在定義 Function Component 的時候,名字首字一定要大寫!
如果不大寫會怎麼樣?
之後進行元件的組合,React 會根據大小寫來區分這個東西是元件?還是想表達 HTML 原本的 tag?
舉以下程式碼為例子:下面是一個叫做 Gallery 的元件,<section>
<h1>
React 會知道我們要表達的是 HTML 原本的 tag,<Profile />
則是叫做 Profile 的元件。
function Gallery() {
return (
<section>
<h1>Amazing scientists</h1>
<Profile />
<Profile />
<Profile />
</section>
);
從前一段的程式碼我們可以發現元件可以彼此組合、重複使用
上一段程式碼 Profile 元件被組合在 Gallery 元件中,如果還有其他元件,也當然可以繼續組合在 Gallery 元件中
也因為這樣組合,這兩個元件產生了「父子關係」,Gallery 元件為 parent component,Profile 元件則為 child component (這個關係與之後會介紹的資料傳遞息息相關)
另外,在了解到這樣的組合性之後,千萬要避免在某個元件之中直接定義另一個元件,這會讓程式跑得很慢且可能導致 bug
function Gallery() {
// ❌ 在 Gallery 元件中定義 Profile 元件
function Profile() {
// ...
}
// ...
}
永遠在程式碼的第一層去定義元件
// ✅ 在第一層定義 Profile 元件,才放入 Gallery 元件
function Profile() {
// ...
}
function Gallery() {
// ...
<Profile />
}
上一段程式碼 Profile 元件被重複使用了三次,所以畫面就會出現三個 Profile 元件所呈現的東西
想看畫面與完整程式碼可參考官方文件的 CodeSandbox
聽說常常能看到這句話,我自己看這句話會覺得:「確實!」
從前面簡單的程式碼可以看出元件能夠從小小的區塊慢慢組合成整個頁面,官方文件說「Most React apps use components all the way down」,畫面即是把 root component 渲染在 index.html 檔案中的 div#root element 上,而 root component 可以由其他 components 組合而成。(這邊快速簡介 root component 就是最上層的元件,親子關係中始祖的概念)
認真很愛官方文件會在每篇文章下面做 Recap 的部分,以下因為覺得文件已經寫得夠精準,就直接搬過來,不做翻譯,只畫重點
以上,有任何想法或文內有誤、不清楚歡迎提出,謝謝大家 🙏🏻
.
筆者小記: 目前官方文件讀到更新物件、陣列的 state,開始深入進階玩法,有趣但也越來越難了 (ง๑ •̀_•́)ง