Skip to main content

什麼是 React

React 是 Meta(原 Facebook)開發並維護的使用者介面建構用 JavaScript 函式庫。特色是宣告式 UI 描述與元件式架構,從小型 widget 到完整 SPA 都能廣泛應用。 React 的核心是透過虛擬 DOM 有效率地重新繪製。當狀態(state)改變時,React 只把差異反映到 DOM,因此不必手動操作 DOM。
本頁介紹的是 React 19 與 Inertia v3 的組合。Laravel 13 啟動套件預設使用此組合。

JSX 與 TSX

React 元件以 JSX(JavaScript XML)語法撰寫,可在 JavaScript 內直接使用類似 HTML 的寫法。
啟動套件標準採用 TypeScript.tsx)。型別定義能加強 IDE 補完,並可及早發現 bug。
Laravel React 啟動套件標準為 TypeScript + TSX。本頁範例全用 TSX 撰寫。

在 Laravel 中的定位

歷史

React 與 Laravel 的關係比 Vue 略淺,但目前已達到同等甚至更高的地位。 Laravel 6(2019 年) 將認證 scaffold 拆到 laravel/ui 套件,同時提供 Vue 與 React 版 scaffold。當時 Vue 為主流,React 版存在感較弱。 Laravel Breeze(2021 年) 加入 Inertia + React 堆疊後才正式獲得採用,Laravel 12(2025 年) 啟動套件全面翻新,React 與 Vue 已完全並列(甚至更早顯示)。

目前主流風格:Inertia × React

目前 Laravel 中 React 使用方式的核心是 Inertia × React。Inertia 實現「Modern Monolith」架構,不用設計 API 即可從 Laravel Controller 直接把資料傳給 React 元件。

建置

透過啟動套件(推薦)

新專案最省事的是使用啟動套件。
於互動式 prompt 選擇 React,以下項目會全部自動設定:
  • inertiajs/inertia-laravel(伺服器端 adapter)
  • @inertiajs/react(用戶端 adapter)
  • react + react-dom(React 19 本體)
  • @vitejs/plugin-react(Vite plugin)
  • TypeScript + @types/react
  • Tailwind CSS + shadcn/ui 元件庫
  • HandleInertiaRequests middleware
  • 登入、註冊等認證畫面(以 Inertia + React + TypeScript 實作)

手動安裝

要加到既有專案,分別安裝伺服器端與用戶端。
接著在 vite.config.ts 加入 React plugin。
resources/js/app.tsx 啟動 Inertia 應用。
手動安裝細節(根樣板設定、middleware 註冊等)請參考 Inertia 官方文件

目錄結構

啟動套件會把 React 頁面元件放到 resources/js/pages/
Inertia::render('posts/index', [...]) 時,resources/js/pages/posts/index.tsx 就是對應的元件。

JSX 語法基礎

React 使用 JSX,在 JavaScript 中寫類 HTML 語法。為了讀懂啟動套件的程式碼,以下是必知的模式。

{} — 變數展開

JSX 中用 {} 嵌入 JavaScript 值或運算式。

條件判斷 — && 與三元運算子

React 沒有相當於 v-if 的指令。簡單條件用 &&,if/else 用三元運算子 ? :

列表渲染 — .map()

列表渲染用 Array.map()。為了差異更新有效率,key prop 必須指定。
相當於 Vue 的 v-for :key 或 Svelte 的 {#each}

className — CSS class 名稱

JSX 會被編譯為 JavaScript,class 為保留字,因此 CSS class 使用 className

事件 handler — 駝峰式

JSX 的事件屬性用駝峰式,並傳入函式參考。

頁面元件基礎

Inertia 頁面元件就是一般的 React 元件。由 Laravel Controller 傳來的資料以 props 接收。

Controller

React 頁面元件

元件只要以參數接收 props 即可使用 Controller 傳來的資料。不需要定義 REST API。
使用 @inertiajs/react 提供的 <Link> 元件時,頁面切換會以 XHR 進行,可避免瀏覽器全頁重新載入。
寫法就像一般 <a> 標籤,但幕後 Inertia 只替換頁面元件,因而有 SPA 般的操作感。

Form 元件

@inertiajs/react 提供的 <Form> 元件是啟動套件認證畫面採用的推薦表單樣式。以 props 指定 actionmethod,並以 children 函式(render prop)接收 errorsprocessing

基本用法

<Form> 的 children 是 ({ errors, processing }) => JSX 的函式(render prop 模式)。Form 元件會自動算出並傳入這些值。表單欄位不使用 onChange handler,而是使用 HTML 原生的 name 屬性,交由瀏覽器標準的表單資料收集機制。

啟動套件的模式

啟動套件用 Wayfinder 將路由當作物件管理。store.form() 會回傳含有路由物件 actionmethod 的物件,用 spread 傳給 <Form>
指定於 resetOnSuccess 的欄位,會在送出成功時自動重置。可指定密碼等送出後想清空的欄位。
不使用 Wayfinder 時,直接傳 action="/login" 這樣的 URL 也能同樣運作。

useForm hook

表單處理使用 @inertiajs/reactuseForm hook,能簡潔實作表單狀態管理、送出、驗證錯誤顯示。

Controller 端

React 表單元件

useForm 回傳物件的主要屬性整理如下。 發生驗證錯誤時,useForm 會保留輸入內容並顯示錯誤。

共用資料(Shared Data)

所有頁面共通所需的資料(登入中使用者資訊、flash 訊息等),在 HandleInertiaRequests middleware 的 share() 方法中定義。
React 元件從 usePage() hook 存取共用資料。
共用資料會包含在每次請求中,建議只放最必要的內容。以 fn() 進行 lazy evaluation,就只有在真正被存取時才會被求值。

React hook 基礎

在 Inertia × React 開發中,該掌握的 React 基本 hook 如下。

useState — 本地狀態管理

useEffect — 副作用處理

useMemouseCallback — 效能最佳化


TypeScript 支援

啟動套件的 React 版預設使用 TypeScript。與 Inertia 的型別定義結合,可確保 props 的型別安全。

全域型別定義

啟動套件在 resources/js/types/index.d.ts 定義共用資料型別。

於頁面元件使用型別


總結

React 與 Laravel 搭配時,透過 Inertia 的「Modern Monolith」架構最能發揮實力。與 TypeScript 的相容性也極佳,適合大型應用開發。 Inertia × React 可獲得 Laravel 後端的簡潔與 React 強大生態系兼具的開發體驗。啟動套件建立專案後含認證畫面在內都能馬上開始開發。

Inertia.js 官方文件

Inertia v3 完整功能請參考官方文件。
最後修改於 2026年8月2日