Joseph Chen
「我想學 React,打開教學影片,看到第一行程式碼:const [count, setCount] = useState(0)—— 這是什麼?const 後面有中括號、等號、括號…我完全看不懂。」
— 幾乎每個第一次學 React 的人,都有這個時刻
這篇文章的目標很簡單:把 React 程式碼裡最高頻率出現的四個 JavaScript 概念講清楚。 學完這篇,你再打開 React 教學,至少不會在語法上卡關。
📦
變數
const / let
⚙️
函式
function
📋
陣列
.map() .filter()
🗂️
物件
{ key: value }
變數——有名字的盒子
最直觀的比喻:變數就像一個有名字的盒子。你把一個值放進去,之後只要叫那個盒子的名字,就能把值取出來。
const — 裝了就不能換
就像一個密封的盒子——放進去之後,蓋子就焊死了,不能再換內容物。React 裡絕大多數變數都用 const。
let — 可以換內容
就像一個普通盒子——你可以把裡面的東西換掉。計數器、迴圈變數才需要用 let。
TIP
React 的資料流是「單向的」——你不會直接修改一個變數,而是呼叫像
setState 這樣的函式來更新狀態。所以大部分的變數設定之後就不需要再換,const 剛好符合這個需求,也讓程式碼更容易讀懂:「看到 const,就知道這個值不會被修改。」函式——把東西丟進去、出來成品
函式就像一台機器:你把原料(輸入)丟進去,機器處理完,吐出成品(輸出)。 同一台機器可以重複使用,只要原料不同,成品也不同。
在 JavaScript 裡,函式由三個部分組成:
參數(Parameters)
函式的「輸入口」,放在小括號裡,可以有多個,也可以沒有
函式體(Body)
大括號 {} 裡面是「機器的運作邏輯」,寫你要做什麼事
return
「成品出口」,把結果傳回給呼叫方。沒有 return 的函式回傳 undefined
React Component 就是函式!
這是最重要的觀念:一個 React Component 就是一個「接收 props、回傳 UI」的函式。 你現在看到的每一個 React Component,都是這個模式。
陣列——有順序的清單(React 最愛用)
陣列就像一張購物清單——按順序列出一堆東西,用數字索引(從 0 開始)存取每一項。 在 React 裡,你幾乎天天都在用陣列——因為資料通常是「一筆一筆」的,你需要把這些資料「渲染」成 UI。
陣列有幾個內建方法,在 React 裡非常高頻率出現——其中 .map() 是最最最重要的一個:
.map() 在 React 裡的樣子
React 用 .map() 把資料陣列轉換成 UI 元素——這是 React 列表渲染的標準寫法,你在每個 React 專案都會看到。
INFO
React 在更新畫面時,會比對「更新前」和「更新後」的 UI 差異,只更新有改變的部分(這是 Virtual DOM 的概念)。
key 就是幫每個列表項目貼一個「識別標籤」,讓 React 知道「這個項目是同一個」還是「換了一個新的」,避免不必要的重新渲染。物件——把相關資料整合在一起
物件就像一張名片——上面有名字、電話、公司、職稱。這些資料都屬於「同一個人」,用物件把它們包在一起,比分開放成多個變數好管理得多。
物件用大括號 {} 建立,裡面放「鍵值對」(key-value pair)——鍵名: 值。
React 裡最常見的物件用法:style
綜合練習——把四個概念串起來
理解了四個概念之後,我們來做一個簡單的書籍清單組件,把所有東西串在一起。 注意看這段程式碼用到了哪些你剛學到的東西:
TIP
答案是不需要——只要
books 陣列有 1000 筆資料,.map() 就會自動渲染出 1000 個卡片。這就是「資料驅動 UI」的概念,React 最核心的精神。核心重點整理
const / let變數:存資料用。const 裝了不能換(React 常用),let 可以重新賦值
函式輸入→輸出的機器。React Component 就是「接收 props、回傳 UI」的函式
陣列 + .map()React 列表渲染的核心。.map() 把資料陣列變成 UI 元素陣列
物件把相關資料組合成一個單位。props、style、API 回傳值都是物件
物件陣列真實資料幾乎都是「物件的陣列」,搭配 .map() 就是 React 的日常
下一篇預告
現在你懂了四個基本概念。但打開 React 程式碼,你還是會看到很多「怪」語法——const { name, age } = user、(a, b) => a + b、...spread……
這些是 ES6+ 的現代語法——下一篇六個語法一次全部搞定,讀完你就能看懂 99% 的 React 程式碼。