【React 學習筆記 EP.10】表單處理

更新 發佈閱讀 6 分鐘

什麼是表單處理?

表單處理是收集使用者輸入並將其與應用程式資料同步的機制。在 React 中,我們通常透過狀態 (State) 來接管表單元素,以精確控制資料驗證與提交邏輯。

表單處理基礎語法

  1. 受控組件:將表單元素的值綁定到 React 的狀態。
  2. 狀態綁定:透過 value 屬性,將輸入框的顯示內容與定義好的變數緊密連接。
  3. 事件監聽:使用 onChange 屬性攔截使用者的每次鍵盤輸入,並即時更新對應的狀態。
  4. 防止預設行為:在表單的 onSubmit 事件中使用 e.preventDefault() 阻止瀏覽器觸發重新整理頁面。

常見錯誤與解決方法

1. 無法輸入內容:設定了 value 卻忘記寫 onChange 事件,建議呼叫 setState 函式來重新渲染畫面。

2. 頁面重新載入:提交表單時未防止預設行為,建議在處理提交的函式第一行加入 e.preventDefault()

import { useState } from "react";

export default function LoginForm() {
// 1. 使用「物件」來集中管理多個輸入框的狀態
const [formData, setFormData] = useState({
account: "",
password: "",
});

// 2. 共用的輸入事件處理函式 (處理多個輸入框的關鍵)
const handleInputChange = (event) => {
// 從觸發事件的元素 (input) 中解構出 name 和 value 屬性
const { name, value } = event.target;

setFormData((prevData) => ({
...prevData, // 展開並保留先前的狀態資料
[name]: value, // 動態更新對應 name 屬性的欄位值
}));
};

const handleFormSubmit = (event) => {
event.preventDefault(); // 阻擋表單送出導致頁面重新載入的預設行為

alert(`登入成功!\n帳號:${formData.account}\n密碼:${formData.password}`);

// 送出成功後,清空表單狀態與輸入框
setFormData({ account: "", password: "" });
};

return (
<form onSubmit={handleFormSubmit}>
<div style={{ marginBottom: "10px" }}>
<label htmlFor="accountInput">帳號:</label>
<input
id="accountInput"
name="account" /* 必須設定 name 屬性,名稱需與 formData 物件的 key 完全一致 */
type="text"
value={formData.account}
onChange={handleInputChange}
required /* HTML5 驗證:設定為必填欄位 */
/>
</div>

<div style={{ marginBottom: "10px" }}>
<label htmlFor="passwordInput">密碼:</label>
<input
id="passwordInput"
name="password" /* 必須設定 name 屬性,名稱需與 formData 物件的 key 完全一致 */
type="password"
value={formData.password}
onChange={handleInputChange}
required /* HTML5 驗證:設定為必填欄位 */
minLength={6} /* HTML5 驗證:限制最少需輸入 6 個字元 */
/>
</div>

<button type="submit">安全登入</button>
</form>
);
}
留言
avatar-img
梧笙 WuSheng 的沙龍
67會員
57內容數
⛰️ 梧笙,意即「吾生」,我是一個平凡的理工宅男。 生活離不開 Code 與 Game,這裡主要紀錄與分享: 📖 學習筆記|紀錄我學習過的電腦技能與知識。 💻 科技新知|整理實用工具與科技領域的資訊。 🎮 電玩娛樂|聊聊遊戲動漫與實況直播的話題。 目前更新頻率不固定,有興趣歡迎追蹤。
2026/05/03
useState 陣列與物件基礎語法,複製狀態:使用 展開運算子 (Spread Operator) ... 將既有物件或陣列內容提取出來。物件更新:以 { ...prevObj, key: newValue } 的寫法覆寫特定屬性,同時保留其餘未修改的資料。
2026/05/03
useState 陣列與物件基礎語法,複製狀態:使用 展開運算子 (Spread Operator) ... 將既有物件或陣列內容提取出來。物件更新:以 { ...prevObj, key: newValue } 的寫法覆寫特定屬性,同時保留其餘未修改的資料。
2026/05/03
React 透過 SyntheticEvent 系統封裝了瀏覽器的原生事件,提供跨瀏覽器一致的互動介面。它是網頁應用程式回應使用者操作(如點擊、輸入、送出表單)的核心機制。
2026/05/03
React 透過 SyntheticEvent 系統封裝了瀏覽器的原生事件,提供跨瀏覽器一致的互動介面。它是網頁應用程式回應使用者操作(如點擊、輸入、送出表單)的核心機制。
2026/05/03
條件渲染是指根據程式當前的狀態 (State) 或屬性 (Props),動態決定要在網頁上顯示哪些 UI 元素,例如:切換登入與登出按鈕的顯示、在資料載入完成前顯示讀取中圖示。
2026/05/03
條件渲染是指根據程式當前的狀態 (State) 或屬性 (Props),動態決定要在網頁上顯示哪些 UI 元素,例如:切換登入與登出按鈕的顯示、在資料載入完成前顯示讀取中圖示。
看更多
你可能也想看
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
5 月,方格創作島正式開島。這是一趟 28 天的創作旅程。活動期間,每週都會有新的任務地圖與陪跑計畫,從最簡單的帳號使用、沙龍建立,到帶著你從一句話、一張照片開始,一步一步找到屬於自己的創作節奏。不需要長篇大論,不需要完美的文筆,只需要帶上你今天的日常,就可以出發。征服創作島,抱回靈感與大獎!
Thumbnail
這集介紹Next Image Module模組和CSS3如何定位在Next.js Framework
Thumbnail
這集介紹Next Image Module模組和CSS3如何定位在Next.js Framework
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
當時間變少之後,看戲反而變得更加重要——這是在成為母親之後,我第一次誠實地面對這一件事:我沒有那麼多的晚上,可以任性地留給自己了。看戲不再只是「今天有沒有空」,而是牽動整個週末的結構,誰應該照顧孩子,我該在什麼時間回到家,隔天還有沒有精神帶小孩⋯⋯於是,我不得不學會一件以前並不擅長的事:挑選。
Thumbnail
動態導覽列為增加使用者經驗UX,要如何在Tailwind CSS上實現呢?這次JayLin來帶大家做一個動態導覽列(Animation Navigation)
Thumbnail
動態導覽列為增加使用者經驗UX,要如何在Tailwind CSS上實現呢?這次JayLin來帶大家做一個動態導覽列(Animation Navigation)
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
當代名導基里爾.賽勒布倫尼科夫身兼電影、劇場與歌劇導演,其作品流動著強烈的反叛與詩意。在俄烏戰爭爆發後,他持續以創作回應專制體制的壓迫。《傳奇:帕拉贊諾夫的十段殘篇》致敬蘇聯電影大師帕拉贊諾夫。本文作者透過媒介本質的分析,解構賽勒布倫尼科夫如何利用影劇雙棲的特質,在荒謬世道中尋找藝術的「生存之道」。
Thumbnail
Todo App是一個很好學習程式語言的專案開始,JayLin來帶大家手把手用TypeScript | React | TailwildCSS 來做一個小專案
Thumbnail
Todo App是一個很好學習程式語言的專案開始,JayLin來帶大家手把手用TypeScript | React | TailwildCSS 來做一個小專案
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
這篇文章深入淺出地解釋 JavaScript 中表達式 (expression) 與陳述式 (statement) 的差異,並以 React 中 JSX 的應用為例,說明為何大括號 {} 內只能放入表達式。文章以類比人類語言的句子結構來幫助理解,並提供相關參考資料連結。
Thumbnail
React.js 是一個熱門的library,JayLin今天講解React核心概念以及利用一個小案例概括理論部分
Thumbnail
React.js 是一個熱門的library,JayLin今天講解React核心概念以及利用一個小案例概括理論部分
Thumbnail
這集跟大家初步介紹Next.js和如何安裝與設置最後製作一個作品集(Portfolio) 如果對設計有興趣的朋友們可以看以下連結文章來學習Figma設計軟件 https://vocus.cc/article/645c733dfd89780001ffe890
Thumbnail
這集跟大家初步介紹Next.js和如何安裝與設置最後製作一個作品集(Portfolio) 如果對設計有興趣的朋友們可以看以下連結文章來學習Figma設計軟件 https://vocus.cc/article/645c733dfd89780001ffe890
Thumbnail
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
本系列文章將循序漸進地介紹 JavaScript 的核心概念,從基礎語法到進階應用,例如非同步程式設計和 React 基礎。內容淺顯易懂,並使用生活化的比喻幫助讀者理解,搭配程式碼範例,適合 JavaScript 初學者學習。
Thumbnail
useEffect 是 React 的一個 Hook,它告訴 React 在以下情況下執行某些代碼。 透過本章的學習,你將能夠 熟練使用 useEffect() 處理 React 副作用,並掌握 最佳實務,確保 React 應用運行順暢、效能最佳!
Thumbnail
useEffect 是 React 的一個 Hook,它告訴 React 在以下情況下執行某些代碼。 透過本章的學習,你將能夠 熟練使用 useEffect() 處理 React 副作用,並掌握 最佳實務,確保 React 應用運行順暢、效能最佳!
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
Thumbnail
見諸參與鄧伯宸口述,鄧湘庭於〈那個大霧的時代〉記述父親回憶,鄧伯宸因故遭受牽連,而案件核心的三人,在鄧伯宸記憶裡:「成立了成大共產黨,他們製作了五星徽章,印刷共產黨宣言——刻鋼板的——他們收集中共空飄的傳單,以及中國共產黨中央委員會有關文化大革命決議文的英文打字稿,另外還有手槍子彈十發。」
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News