前端框架

-

React 是什麼?2025 完整新手學習指南

this.web

React 中文教學 1 - 什麼是 React 與環境設置

React 是當今前端開發中最熱門的技術之一,不管你想要轉職前端,還是後端想做 Side Project,甚至是想利用 AI 來打造自己的網頁 App,理解 React 的基礎概念與環境設置都是入門的第一步。

本篇文章將帶你認識什麼是 React、它的特色與優勢,以及如何設置開發環境,幫助你快速開始你的 React 學習之旅。

想提升技術但沒有方向?

如果你希望在接下來一年:

➊ 有計劃地變強,停止自我懷疑

➋ 把學到的技術變成履歷亮點

➌ 成為團隊中前 10% 的工程師

我會帶你用 2.5 小時,

打造接下來 12 個月的技術成長攻略

免費報名體驗課

image

什麼是 React?

React 是一個由 Facebook 開發的開源 JavaScript 函式庫,專為構建高效、可維護的用戶界面(UI)而設計。它特別適合用於開發單頁應用(Single Page Applications, SPA),讓使用者不需要刷新頁面並享受更流暢的使用體驗。

雖然官方聲稱 React 是一個函式庫,但 React 的生態完整性,說他是一個框架也不為過。

延伸閱讀:框架和函式庫的差別?

React 的核心理念是「組件化」。它將複雜的頁面拆解成一個個獨立的、可重複使用的組件,每個組件負責自身的邏輯和渲染。當數據發生變化時,React 會通過「虛擬 DOM(Virtual DOM)」來更有效率的更新頁面,減少直接操作真實 DOM 的開銷,進而提升性能。

簡單來說,React 讓你可以用更直觀、更模組化的方式開發前端應用,特別適合那些需要頻繁更新的動態網站。

為甚麼我們要學習 React?

接著讓我們從技術層面和現實層面來討論為甚麼要學 React。

簡化開發流程

在過去,使用原生 JavaScript 開發大型 web 應用是一件非常困難的事情,除了一堆商業、UI、功能的邏輯交雜在一起,我們還需樣管理成百上千個 DOM 元素、處理大量狀態、實現可重用 UI 組件或特效等等問題,很容易讓程式碼變得冗餘、難以維護。

而 React 前端框架的出現解決了這些痛點。它提出了一種全新的構建用戶界面 (UI) 的方式,也改變了前端開發的環境。

學習 React 並不是為了替代原生 JavaScript,而是為了在一定層面上簡化和提高大型應用的開發效率。而 React 的設計思想也能幫助我們構建優雅、高效、可擴展的前端應用,並且這些思想也能夠讓我們在軟體領域走的更深更遠。

更好的工作機會

因為 React 提高了前端的開發效率,越來越多公司拋棄 JQuery 並選擇 React,也因此豐富了 React 的生態系統,有龐大的開發者社群,提供很多封裝好的工具或函式庫、UI 庫,並也提供更多的工作機會。

也因此,不管是為了更快的開發還是找工作,或是培養更深度的程式設計思想,學習前端框架是必要的路程之一。

延伸閱讀:

2025 前端框架怎麼選?React、Vue、Angular 完整比較指南

React 的特色

React 之所以受到廣泛歡迎,除了背靠大公司 Facebook 以外,它獨特的設計與功能也受到開發者的支持和青睞。下面我就舉出 React 的 5 大特色:

  1. 組件化開發:React 鼓勵將 UI 分解為獨立的組件,例如按鈕、表單或導航欄。這些組件可以獨立開發、測試和重用,大幅提升程式碼的可維護性。再也不用每個地方都寫一樣的程式碼。
  2. 虛擬 DOM:React 利用虛擬 DOM 來優化頁面的更新。每次數據變化時,React 會先計算出需要更新的部分,再一次性更新到真實 DOM,避免不必要的重繪與重排,提升渲染的效率。
  3. 單向數據流:在 React 中,數據從父組件單向流向子組件,這種設計讓數據的流向更清晰且可預測,減少了因數據混亂導致的 bug。
  4. JSX 語法:React 引入 JSX,一種結合 JavaScript 和 HTML 的語法,讓開發者能以更直觀的方式撰寫組件。
  5. 豐富的生態系統:React 擁有強大的社區和生態支持,我們能夠結合像 React Router(路由管理)、Redux(狀態管理)等第三方函式庫,讓我們能輕鬆地去構建更複雜的應用。
  6. 跨平台的開發:除了 Web 開發以外,還能搭配 React Native 來開發行動應用程式,也就是說只要學會 React,就能同時開發網頁和手機。

簡單說,React 能夠在眾多框架中脫穎而出,這是因為其高性能、組件靈活性,以及背靠大公司和強大的生態系統

延伸閱讀:

React 常用的 JSX 渲染方法 - 條件渲染、渲染列表

學習 React 前,你應該具備的知識

在學習 React 前,你需要掌握一些基礎知識,因為 React 是建立在這些知識上的前端框架,如果你是第一次接觸網頁的新手,可以先從 W3Schools 開始學習基礎知識~以下是學習 React 前應具備的技能

  • HTML/CSS
    理解網頁的基本結構(如標籤、屬性)和樣式(如選擇器、盒模型),這些是構建網頁 UI 的基礎。
  • JavaScript
    掌握 JS 的核心概念,包括變數、函式、物件、陣列、事件處理等。React 的邏輯幾乎都用 JS 實現,因此這部分至關重要。
  • ES6(建議)
    熟悉 ES6 的新語法,例如箭頭函式(=>)、解構賦值({a, b} = obj)、模組導入(import),這些在 React 中非常常見。雖然不是必須,但能讓你的代碼更簡潔高效。

有了這些基礎,你就可以更輕鬆地進入 React 的學習。

React 和原生 JS 的差別

React 與原生 JavaScript 在開發方式上有很大的不同,

  1. 組件化 vs 傳統 DOM 操作:原生 JS 通常直接操作 DOM(例如 document.getElementById),更新頁面時需要手動修改。React 則透過組件和虛擬 DOM 管理更新,自動完成渲染。原生 JS 就像一個很笨的建築工人,你必須告訴他要"如何做 (如何操作 DOM)”,他才會做出網頁;而 React、Vue 就像是聰明的建築工人,你只需要告訴他 "你想要的樣子”,他就會自動幫你搞定網頁操作 DOM 的細節。
  2. 聲明式 Declarative vs 命令式 imperative:React 採用聲明式編程,你只需描述 UI 應該長什麼樣子,React 會負責實現更新;而原生 JS 是命令式編程,需要明確告訴瀏覽器每一步該做什麼。關於聲明式和命令式的差別,可以參考這篇文章
  3. 可維護性:React 的組件化設計可以讓程式碼的結構更清晰,且易於維護和擴展。原生 JS 在大型專案中很容易就變得雜亂,當專案越大,維護成本也會越高。
  4. 單向數據流:在 React 中,資料只能從上往下傳遞,可以把資料想像成河水,它只能從上游(資料來源)流向下游(使用者介面),不能反向回去或橫流叉流,這樣的好處是我們可以更好的管控資料。
  5. 學習曲線:原生 JS 入門雖然簡單,但在大規模應用中需要更多程式碼來實現複雜功能。反之,React 初期需要學習新概念(如 JSX、組件),但掌握後能顯著提升開發效率。了解了 React 的角色以及為何要學 React 後,下一步就是要來設置能寫 React 的環境。

延伸閱讀:

虛擬 DOM 是什麼?(Virtual DOM)

React 環境設置 - 安裝 Node.js 與 Terminal

大致了解 React 後,我們就可以來建置 React 環境了,設置 React 環境的步驟不會很難,只要照著以下的步驟就能順利完成,步驟只有 2 步,分為:

  1. 下載並安裝 Node.js
  2. 使用 Terminal 建置 React 環境

接著就可以運行 React 開始寫程式了,沒錯就這麼簡單~

下載並安裝 Node.js

Node.js 的官網,點擊畫面中的 Download Node.js,下載完後行安裝即可。

Nodejs

安裝過程基本上就是一直按“繼續”就好,不需要額外什麼設定。

step1step2step3

等他安裝完後這一部就完成了,我們可以在終端機中輸入 node -vnpm -v 確認 Node.js 和 npm 已正確安裝。

如果你是 Mac 用戶,推薦你使用 Warp 這個終端機,而如果你是 windows 用戶,可以使用 windows terminal,下載後打開即可在裡面輸入下面的指令,來檢查是否有正確安裝:

node -v
npm -v

如果正確安裝,他會顯示你的 node 和 npm 版本。

node version

當然,你也可以直接使用 vs code 內建的 terminal 來執行命令,只要按 ctrl + ` 就可以打開並輸入命令。

vscode terminal

安裝完 Node.js 後,接著就可以來建置 React 環境了。

建置 React 環境

通常有兩種方法可以建置 React:

  • 使用 create-react-app 指令 (官方已經不推薦使用這個了)
  • 使用 vite 工具 (推薦)

第一種是官方的指令,第二個則是使用現在更流行的工具來更快建置 React 專案,兩個各有優缺點,但現在只是要練習,推薦直接使用第二種更快速的方式

使用 Create React App 建置 React 環境

1. 全局安裝 Create React App:在終端機中執行以下命令:-g 的意思是 global,也就是在電腦上安裝這個指令。

npm install -g create-react-app

2. 建立新的 React 專案:接著使用指令創建你的 react app

create-react-app your-app-name

3. 進入專案目錄:利用 cd 指令移動到你的 react app 目錄

cd your-app-name

4. 啟動開發伺服器:

npm start

接下來來看用 vite 的方式~

使用 Vite 建置 React 環境。

使用 vite 建置 React 的方法簡單一點,步驟是:

1. 使用 Vite 建立新的 React 專案: 在終端機中執行以下命令:

npm create vite@latest my-app --template react

2. 進入專案目錄:

cd my-app

3. 安裝相依性:

npm install

4. 啟動開發伺服器:

npm run dev

到這邊就建置完成了,非常簡單吧!

文件檔案目錄結構

當你用 cli 快速建立出來專案後,新手可能會看到裡面有一堆資料夾,不知道從哪裡下手,這邊也簡單介紹一下每個目錄裡面是幹嘛的:

my-app/
├── node_modules/  # 套件資料夾
├── public/        # 靜態資源
├── src/           # 主要的 React 檔案
│   ├── App.js     # 主要的 React 組件
│   ├── index.js   # 程式進入點
│   ├── components/ # 可存放額外的組件
├── package.json   # 專案資訊與依賴
├── README.md      # 項目說明文件
└── ...
  • node_modules/:相關的依賴React 基礎概念
  • public/:存放靜態文件,例如 SVG、字體、圖片等等。
  • src/:你的主要工作區,像是自定義的 React 組件、程式邏輯都放在這裡。
  • package.json:專案的資訊和依賴的程式庫。

有時候我們也會新增 style/ 資料夾來放相關的樣式,或是 lib/ 資料夾放其他輔助的程式邏輯。

補充

在網路上會看到有些教學使用 CDN 來引入 React 使用,或是使用線上編輯器,例如 codepenCodeSandbox 來使用 React,這些方法都可以用來練習 React,但要製作自己的專案,還是必須用前面提到到的兩個方法喔!

React 必學 5 個重要觀念

當我們建置完環境,準備正式進入 React 之前,要先來說說 React 幾個很重要觀念,這些觀念可以說是適用於整個前端生態包括其它框架,很多新手在接觸 React 或其它框架時,會覺得很不習慣或不好上手,有很大一部份就是因為沒有先建立這些的觀念,所以我會建議先花一點時間理解一下這 5 個重要觀念喔!分別是:

  1. JSX 語法
  2. 組件 Components
  3. 屬性 Props
  4. 狀態 State
  5. 鈎子 Hooks

JSX 語法

JSX 是 React 很重要也很基本的語法,他就像是在 JS 裡寫 HTML,這邊做個簡單的示範,我們先宣告一個變數 title,並且給他一個 <h1 /> 的值,就像下面這樣,是不是蠻像在 JS 裡寫 HTML 的呢?

const title = <h1>Hello, world!</h1>

JSX 語法的強大之處在於,我們可以用花括號 {} 來搭配其他 JavaScript 的變數,比如我們希望 title 可以重複使用,能夠給他不同的 message 來顯示不同的標題。

我們就能像下面這樣把 { message } 放到 title 中:這就是 JSX 的好處。

const message = 'Hello, World!'
const title = <h1>{ message }</h1>
// <h1>Hello, world!</h1>

更進階的用法,可以搭配 template literals 樣板字面值 來使用,例如:

const message = 'Hello, World!'
const title = <h1>{ `This is my message: "${message}"`}</h1>
//<h1>This is my message: "Hello, world!"</h1>

當然我們也可以添加 HTML 的屬性在 JSX 裡,利如 classiddata-* 等等常見的 HTML 屬性,但要注意的是,因為我們是在 JS 裡,所以有些語法會和在 HTML 裡不太一樣。

1. className : 在 JSX 裡如果要寫 class,必須要寫成 className

const title = <h1 class="heading">{ message }</h1> // 錯誤
const title = <h1 className="heading">{ message }</h1> // 正確

這是因為在 JS 中,已經有 class 這個關鍵字了,所以要用 className 代替。

2. 駝峰式命名 (camel) : 在 JSX 中,屬性的名稱要用駝峰式命名代替

const title = <h1 onclick={() => alert('hello')}>{ message }</h1> // 錯誤
const title = <h1 onClick={() => alert('hello')}>{ message }</h1> // 正確

比如說,點擊事件是 onclick,但在 JSX 裡就要用 onClickC 是大寫!

aria-*data-* 就不需要,因為中間已經有 - 連接了。

補充:其實 JSX 在最後也會被轉譯成 JS 格式,例如

const message = 'Hello, World!';
const element = <h1>{message}</h1>;

// 變成

const message = 'Hello, World!';
const element = React.createElement('h1', null, message);

這個轉換過程是由 Babel 等工具完成的,我們現在不太需要關心具體的實現。

組件 Component

第二個重要的觀念是 Component 組件(有些人也稱為元件)可以想像一個頁面是好幾個組件所組成的,像是一般的網站可能會有 Header 組件、Button 組件、Footer 組件 ... 等等。每個組件都擁有自己的結構、樣式、行為邏輯。

以往我們用原生 JS,如果網頁上有很多個類似的按鈕,我們可能會重複寫非常多類似的邏輯或樣式:

<button class="btn btn-primary">My Button</button>
<button class="btn btn-outline">My Button</button>
<button class="btn btn-underscore">My Button</button>

每個 button 又要寫額外的 style 或事件邏輯,這會讓網站難以維護。

所以組件的好處就是可以讓我們重複使用相同的結構,而在 React 裡,一切皆是函數,一個函數就代表一個組件

舉個簡單例子,我們可以創建一個 Button 函數組件,並且將 JSX 用 括號 () 括起來:

function Button() {
  return (
    <button class="btn">
      My Button
    </button>
  );
}

Button 函數返回的值就是上面提到的 JSX 。要注意的有三件事情

  1. 如果 return 的 JSX 超過一行,就要用 () 括起來
  2. 組件的名稱開頭一定要是大寫,這是為了讓 React 區別是一般 HTML tag 還是我們自訂的組件
  3. 我們一次只能返回一個父元素,如果超過兩個父元素像這樣:
// 錯誤
function Button() {
  return (
    <label>This is a button</label>
    <button class="btn">
      My Button
    </button>
  );
}

我們要用一個更大的父元素將其包起來:

// 正確
function Button() {
  return (
    <div>
      <label>This is a button</label>
      <button class="btn">
        My Button
      </button>
    </div>
  );
}

在 React 中,我們也可以用一個空的 tag <> 來包住子元素,這個在 React 裡稱為 Fragment 組件,空 tag 是 Fragment 組件的簡寫。

// 正確
function Button() {
  return (
    <>
      <label>This is a button</label>
      <button class="btn">
        My Button
      </button>
    </>
  );
}

建立好 Button 組件後,我們就可以在需要的地方直接使用 <Button /> 來使用組件。

<Button />
<Button />
<Button />

下一步,如果我們希望可以單獨控制每個 <Button /> 的樣式、事件等等, props(屬性)就可以做到!

屬性 Props

我們可以傳入參數給 React 函數組件,也就是所謂的 Props 屬性,這樣的好處是讓組件的複用性更高,比如說,我們希望可以自由地調整 Button 的 Background 和文字,並且想針對不同的 Button 有不同的點擊效果,我們就可以稍微改寫一下上面的例子:

function Button(props) {
  return (
    <button
      onClick=(props.onClick)
      style={{backgroundColor: props.color}}>
      {props.text}
    </button>
  );
}

這個 Button 組件接收三個屬性參數: colortextonClick。當我們使用這個組件時,只需要傳入不同的屬性值,就能夠快速打造多個有相同架構的按鈕:

<Button color="blue" text="Click Me" onClick={console.log('you click me')} />
<Button color="red" text="Don't Click" onClick={console.log('don't click)}/>

這樣就能渲染出兩個不同顏色和文字的按鈕,並且有不同的 console

我們可以把 props 想像成組件的 "inputs" 或 "參數",它們決定了組件的外觀和行為。比如前面 Button 組件的例子,color 、 text 和 onClick 就是組件的三個參數。

所以組件化的優勢在於可重用性一旦創建好一個通用組件,無論在應用的任何地方,我們都可以輕鬆地複用它。這種模塊化設計大大提高了開發效率和程式的可維護性。

當然,我們也可以使用 ES6 的解構語法來簡化程式:

function Button({ color, text, onClick }) {
  return (
    <button
      onClick={onClick}
      style={{backgroundColor: color}}>
      {text}
    </button>
  );
}

現在我們已經能在網站的每個地方重複使用這個 Button 了!

不過現在有個新的需求,PM 希望用戶點擊按鈕之後,可以更改按鈕的文字,我們該怎麼做呢?這就要提到狀態 state。

狀態 State

狀態(state) 和屬性(props) 是新手很容易搞混的地方!

每個組件都可以有自己的狀態,當狀態更新的時候,畫面就會跟著更新,如果我們想在 React 中使用狀態,需要使用 useState,就像這樣:

const [myText, setMyText] = useState(props.text)

需要傳入一個初始值,如果想要改變狀態的值,只能用setState 來改變來告訴 React 說要更新畫面,所以我們可以這樣改寫 Button 組件:

function Button(props) {
  const [myText, setMyText] = useState(props.text) // 這是在 React 中宣告 state 的語法
  const changeText = () => {
    setMyText('你點擊我了!') // 並且我們只能用 set... 來更改 state
  }
  
  return (
    <button
      onClick={changeText}
      style={{backgroundColor: props.color}}>
      {myText}
    </button>
  );
}

上面程式碼解釋是:

  1. useState 創建一個狀態變量 myText 和一個用來更新這個狀態的函式 setMyText
  2. 定義了一個名為 changeText 的函式,當調用這個函式時,它會使用 setMyText 函式來更新 myText 狀態的值為"你點擊我了!"
  3. 最後,組件返回了一個 JSX 表示的 button 元素。這個按鈕被設置了一個點擊事件處理器,當按鈕被點擊時會調用 changeText 函式,從而更新按鈕上顯示的文字。

利用狀態,就能告訴 React 說要更新畫面了!

延伸閱讀:

React useState 2025 詳細教學

鉤子 Hooks

React 的另一個強大特色就是「Hooks」,它可以讓我們在組件中使用各種 React 功能的機制

事實上,useState 就是第一個你接觸到的 Hook,而 Hooks 的世界遠不止這樣。

你可以把 Hook 想像成模組,而 React 組件是一台機器(比如一台桌上型電腦),這個機器一開始只能做一些很基礎的事情,比如顯示畫面(return JSX)。

但我們總是會有一些額外需求,比如記錄狀態(用戶點了幾次按鈕)、在頁面載入時做些事情(發 API)、操作某個元素(聚焦輸入框)等等。

這時候你會想:「我要怎麼做這些額外的功能?」

Hooks 就是提供額外功能的模組,他可以很輕鬆地引入做使用,像是useState 讓我們引入「狀態模組」,能根據狀態改變畫面。

這個設計的厲害之處在於:你原本只是一個單純的函數,透過 Hook,一個個裝進去,就有了狀態、有了生命週期、有了更多互動能力。

5 大觀念小總結

以上就是對 React 基礎概念的詳細解釋,希望通過案例和比喻,能讓你對 JSX、組件、props、state 核心理念有初步的理解。

最後簡單總結這個篇幅的重點:

  1. JSX : 類似在 JS 裡寫 HTML,可以用 {} 來結合 JS 的語法。
  2. 組件化:React 中每個組件都是一個函數,且返回 JSX
  3. 屬性:傳入參數當作組件的屬性,可以更好操控利用組件
  4. 狀態:每個組件都有自己的狀態,只有狀態改變,UI 才會改變,且要使用 React 的 useState 才能宣告狀態。
  5. 鈎子:讓一般的函數組件具有更多功能的模組。

開始你的 React 之旅吧!

看到這邊,相信你對 React 已經有一個基本的認識,如果你已經下定決心學習 React 了,這邊也推薦幾個很不錯的資源,讓你能快速開始學習:

  1. React 官方的英文教學
  2. React 官方的中文教學 - 建議搭配英文教學一起看,了解常見名詞的中文
  3. 2 小時 React 快速入門 - 如果你喜歡看影片學習,這個是很不錯的 YT 教學

你可能會感興趣的文章 👇