ReactJS - Components: 打開動態用戶界面的門戶

你好啊,未來的React魔法師!? 我很高興能成為你進入React組件世界的導遊。作為一個教了年輛計算機科學的老師,我可以告訴你,理解組件就像是打開了網頁開發可能性的寶藏箱。所以,讓我們深入探討,並將這個複雜的主題解釋得像水晶般清澈!

ReactJS - Components

React組件是什麼?

在我們開始編程之前,讓我們先了解一下組件是什麼。想像你正在用樂高積木蓋房子。每一個房間都可以被視為一個組件——自包含、可重用,並且是更大結構的一部分。這正是React組件在網頁開發世界中的角色!

組件是任何React應用程序的建造基石。它們是獨立且可重用的代碼片段,作用與JavaScript函數相同,但是它們獨立運行,並通過render函數返回HTML。

React組件的類型

在React宇宙中,我們主要有兩種類型的組件:

  1. 函數組件
  2. 類組件

讓我們詳細探討每一種。

函數組件

函數組件是React中編寫組件最簡單的方式。它們只是返回JSX(React用於描述UI應該長得怎樣的語法)的JavaScript函數。

創建函數組件

這是如何創建一個簡單的函數組件:

function Welcome(props) {
return <h1>Hello, {props.name}!</h1>;
}

讓我們分解一下:

  • 我們定義了一個名為Welcome的函數。
  • 它接受一個名為props(屬性的簡稱)的單一參數。
  • 它返回一個JSX片段,這裡是一個包含問候的<h1>元素。
  • {props.name}是我們如何使用傳遞給這個組件的name屬性。

使用這個組件,你會這樣寫:

<Welcome name="Alice" />

這會在頁面上渲染出:"Hello, Alice!"。

這不是很棒嗎?就像是創造你自己的自定義HTML標籤!

類組件

類組件稍微複雜一些,但提供了更多的功能。它們是繼承自React.Component的ES6類。

創建類組件

這是如何創建一個類組件:

import React from 'react';

class Welcome extends React.Component {
render() {
return <h1>Hello, {this.props.name}!</h1>;
}
}

讓我們剖析一下:

  • 我們導入了React(類組件必需)。
  • 我們定義了一個名為Welcome的類,它繼承自React.Component
  • 類有一個render()方法,它返回JSX。
  • 我們使用this.props而不是props來訪問屬性。

使用這個組件的方式和函數組件一樣:

<Welcome name="Bob" />

這會在頁面上渲染出:"Hello, Bob!"。

當使用函數組件還是類組件

這裡有一個快速對比表,幫助你決定:

特性 函數組件 類組件
語法 更簡單,更容易閱讀和測試 更複雜
狀態 可以使用hooks管理狀態 可以使用this.state
生命周期方法 使用useEffect hook 有訪問所有生命周期方法的權限
性能 稍微優良 稍微慢
未來 現代React中的首选 未來可能會被淘汰

一般來說,從函數組件開始,並只在需要類組件提供的特定功能時使用它們。

創建更複雜的組件

現在我們已經涵蓋了基礎知識,讓我們創建一個更複雜的組件,這個組件展示了如何從較小的組件組合成更大的UI部件。

function Comment(props) {
return (
<div className="Comment">
<UserInfo user={props.author} />
<div className="Comment-text">
{props.text}
</div>
<div className="Comment-date">
{formatDate(props.date)}
</div>
</div>
);
}

function UserInfo(props) {
return (
<div className="UserInfo">
<Avatar user={props.user} />
<div className="UserInfo-name">
{props.user.name}
</div>
</div>
);
}

function Avatar(props) {
return (
<img className="Avatar"
src={props.user.avatarUrl}
alt={props.user.name}
/>
);
}

在這個例子中:

  • 我們有一個主要的Comment組件,它使用了UserInfo組件。
  • UserInfo組件又進一步使用了Avatar組件。
  • 每個組件負責渲染UI的特定部分。

這種結構展示了組件組合的力量——從簡單、可重用的部件构建複雜的UI。

分割組件

隨著你的應用程序成長,將組件分割成更小、更易於管理的部分變得非常重要。但是你如何知道何時分割一個組件呢?這裡有一些指導原則:

  1. 單一職責原則:如果你的組件做了太多事情,分割它。
  2. 可重用性:如果你的組件的一部分可以在其他地方使用,將它做成一個獨立的組件。
  3. 複雜性:如果你的組件變得難以理解,可能是時候把它拆分了。

記住,組件就像是樂高積木——它們越模塊化,你的應用程序就越靈活!

結論

恭喜你!你剛剛在React組件的世界中迈出了重要的一步。我們已經介紹了函數組件、類組件,如何創建它們,甚至還觸及了組件組合和分割。

記住,精通React組件就像學習演奏樂器一樣——需要練習。所以如果它立即沒有點醒你,不要氣餒。持續編程,持續實驗,很快你就能編寫出美麗的React交響曲!

在我們的下一課中,我們將深入探討屬性和狀態,這是讓你的組件變得有生氣的動力二重奏。到時候見!??

Credits: Image by storyset