Joseph Chen
「你學完基礎 JS,打開 React 程式碼,第一行就看到:const [count, setCount] = useState(0)—— 這個 [count, setCount] = 是什麼鬼語法?別緊張——這是 ES6 的解構賦值,這篇六個語法讀完你就全懂了。」
— ES6 是 2015 年發布的 JavaScript 大改版,現代 React 程式碼全都是這個語法
箭頭函式
() => {}解構賦值
const { a } = obj展開運算子
[...arr]模板字串
`Hello ${name}`import/export
import X from Y選用鏈
obj?.key ?? default箭頭函式 () => {}
箭頭函式就是函式的速記法——功能完全一樣,只是寫法更短。在 React 裡你到處都會看到它,特別是事件處理和 .map() 回呼。
INFO
大多數情況下可以互換。React 社群偏好箭頭函式,因為更短、更容易閱讀。 唯一要注意的是:箭頭函式沒有自己的
this(這在 EP.03 閉包篇會講到)。解構賦值——從快遞盒裡拆包裹
解構賦值就像「拆包裹」——從陣列或物件裡,把你要的東西直接取出來,並且立刻幫它命名。 這是 React 裡最高頻率出現的 ES6 語法,特別是 useState 和 props。
陣列解構——useState 的秘密
物件解構——props 的秘密
Component props 的解構
這是你在 React 裡最常看到的用法:在函式參數裡直接解構 props 物件。
展開運算子 ...
三個點 ...,叫做展開運算子(Spread Operator)。比喻:就像「複製貼上」——把一個陣列或物件的所有內容展開到另一個裡面。
為什麼 React 這麼常用展開運算子?
React 要求狀態更新必須用全新的物件或陣列,不能直接修改(mutate)原本的。 這是因為 React 判斷狀態有沒有改變,是比對「參考(reference)」而非「內容」。 展開運算子剛好可以輕鬆建立新物件,同時保留原本的屬性。
TIP
const copy = [...arr] 是展開(建立新陣列)const [first, ...rest] = arr 是解構(取出元素),...rest 這裡叫「Rest Parameter」形狀一樣,但用途不同——看左邊是賦值目標還是值表達式來判斷。
模板字串 `${ }`
模板字串用反引號(`,鍵盤左上角 Tab 鍵上方)包住,在字串裡用 ${} 嵌入變數或運算式。比喻:就像填空題——先把空格留好,需要的時候再填進去。
REACT
`px-4 py-2 ${isActive ? 'bg-blue-500' : 'bg-gray-200'}`不過更複雜的情況下,大家通常改用
clsx 或 cn 工具函式。import / export——模組化的基礎
每個 .js / .tsx 檔案就是一個「模組」。模組可以把裡面的東西「輸出」(export),讓其他模組「輸入」(import)使用。比喻:就像公司的各個部門——財務部把報表「輸出」給管理部,管理部「輸入」後才能做決策。
React 程式碼裡到處都是 import
INFO
一個約定俗成的規則:Component 用 default export(因為一個檔案通常只有一個主要 Component),工具函式用 named export(一個 utils 檔案可能輸出很多函式)。不過這只是慣例,不是強制規定。
選用鏈 ?. 與空值合併 ??
這兩個符號是防禦性編程的好工具——在資料可能是 null 或 undefined 的情況下,避免程式噴錯炸掉。 在串接 API 資料、處理 React props 時特別常用。
React Component 的防禦性寫法
綜合範例——改寫前 vs 改寫後
讓我們把同一個 Component 用 ES5 和 ES6+ 各寫一次,看看差距有多大。 邏輯完全一樣,但可讀性天差地遠:
從 13 行壓縮成 4 行,可讀性卻反而更好——這就是現代 ES6+ 語法帶來的威力。 你在 React 程式碼裡看到的「精簡」寫法,背後都是這幾個語法的組合。
六個語法速查表
箭頭函式
(a, b) => a + b函式的速記法。React 事件處理和 .map() 回呼的標準寫法
解構賦值
const { a, b } = obj從陣列或物件中直接取出並命名。useState、props 的核心語法
展開運算子
[...arr] {...obj}複製並展開陣列/物件。React 狀態更新必用,確保不可變性
模板字串
`Hello ${name}`反引號字串,可嵌入變數和運算式。動態字串的最佳寫法
import/export
import X from Y模組系統。每個 .tsx 檔案都是模組,Component 用 default export
選用鏈 + ??
obj?.a ?? default安全存取可能為 null/undefined 的值,給予預設值
現在你能看懂什麼了?
還記得開篇的那行程式碼嗎:
你現在已經能完整讀懂這段程式碼了。接下來的文章,我們會開始真正使用 React——你已經準備好了。
下一步
語法你現在全懂了。但你可能還有一個問題:React 為什麼要存在? 「傳統 HTML + JS 不是也可以做網頁嗎?」——下一篇從這個問題開始, 讓你真正理解 React 的設計哲學。