選單
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP 如何 W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

React 表單


就像在 HTML 中一樣,React 使用表單允許使用者與網頁進行互動。


在 React 中新增表單

您像新增任何其他元素一樣在 React 中新增表單

示例

新增一個表單,允許使用者輸入他們的姓名

function MyForm() {
  return (
    <form>
      <label>Enter your name:
        <input type="text" />
      </label>
    </form>
  )
}
const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

執行示例 »

這會正常工作,表單將提交併且頁面將重新整理。

但這通常不是我們希望在 React 中發生的事情。

我們希望阻止這種預設行為,並讓 React 控制表單。


處理表單

處理表單是指當資料改變值或被提交時,您如何處理這些資料。

在 HTML 中,表單資料通常由 DOM 處理。

在 React 中,表單資料通常由元件處理。

當資料由元件處理時,所有資料都儲存在元件狀態中。

您可以透過在 onChange 屬性中新增事件處理程式來控制更改。

我們可以使用 useState Hook 來跟蹤每個輸入的值,併為整個應用程式提供“單一資料來源”。

有關 Hook 的更多資訊,請參閱 React Hook 部分。

示例

使用 useState Hook 管理輸入

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

function MyForm() {
  const [name, setName] = useState("");

  return (
    <form>
      <label>Enter your name:
        <input
          type="text" 
          value={name}
          onChange={(e) => setName(e.target.value)}
        />
      </label>
    </form>
  )
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

執行示例 »


w3schools CERTIFIED . 2022

獲得認證!

完成 React 模組,完成練習,參加考試,並獲得 w3schools 認證!

$95 註冊

提交表單

您可以透過在 <form>onSubmit 屬性中新增事件處理程式來控制提交操作

示例

新增一個提交按鈕並在 onSubmit 屬性中新增一個事件處理程式

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

function MyForm() {
  const [name, setName] = useState("");

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(`The name you entered was: ${name}`)
  }

  return (
    <form onSubmit={handleSubmit}>
      <label>Enter your name:
        <input 
          type="text" 
          value={name}
          onChange={(e) => setName(e.target.value)}
        />
      </label>
      <input type="submit" />
    </form>
  )
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

執行示例 »


多個輸入欄位

您可以透過為每個元素新增一個 name 屬性來控制多個輸入欄位的值。

我們將用一個空物件初始化我們的狀態。

要訪問事件處理程式中的欄位,請使用 event.target.nameevent.target.value 語法。

要更新狀態,請在屬性名稱周圍使用方括號 [bracket notation]。

示例

編寫一個包含兩個輸入欄位的表單

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

function MyForm() {
  const [inputs, setInputs] = useState({});

  const handleChange = (event) => {
    const name = event.target.name;
    const value = event.target.value;
    setInputs(values => ({...values, [name]: value}))
  }

  const handleSubmit = (event) => {
    event.preventDefault();
    alert(inputs);
  }

  return (
    <form onSubmit={handleSubmit}>
      <label>Enter your name:
      <input 
        type="text" 
        name="username" 
        value={inputs.username || ""} 
        onChange={handleChange}
      />
      </label>
      <label>Enter your age:
        <input 
          type="number" 
          name="age" 
          value={inputs.age || ""} 
          onChange={handleChange}
        />
        </label>
        <input type="submit" />
    </form>
  )
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

執行示例 »

注意:我們為兩個輸入欄位使用相同的事件處理函式,我們可以為每個欄位編寫一個事件處理函式,但這會使我們的程式碼更簡潔,並且是 React 中首選的方式。


Textarea

React 中的 textarea 元素與普通 HTML 略有不同。

在 HTML 中,textarea 的值是起始標籤 <textarea> 和結束標籤 </textarea> 之間的文字。

<textarea>
  Content of the textarea.
</textarea>

在 React 中,textarea 的值放在 value 屬性中。我們將使用 useState Hook 來管理 textarea 的值

示例

一個帶有一些內容的簡單文字區域

import { useState } from 'react';
import ReactDOM from 'react-dom/client';

function MyForm() {
  const [textarea, setTextarea] = useState(
    "The content of a textarea goes in the value attribute"
  );

  const handleChange = (event) => {
    setTextarea(event.target.value)
  }

  return (
    <form>
      <textarea value={textarea} onChange={handleChange} />
    </form>
  )
}

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<MyForm />);

執行示例 »


選擇

在 React 中,下拉列表或選擇框也與 HTML 有點不同。

在 HTML 中,下拉列表中選定的值透過 selected 屬性定義

HTML

<select>
  <option value="Ford">Ford</option>
  <option value="Volvo" selected>Volvo</option>
  <option value="Fiat">Fiat</option>
</select>

在 React 中,選定的值透過 select 標籤上的 value 屬性定義

示例

一個簡單的選擇框,其中選定的值“Volvo”在建構函式中初始化

function MyForm() {
  const [myCar, setMyCar] = useState("Volvo");

  const handleChange = (event) => {
    setMyCar(event.target.value)
  }

  return (
    <form>
      <select value={myCar} onChange={handleChange}>
        <option value="Ford">Ford</option>
        <option value="Volvo">Volvo</option>
        <option value="Fiat">Fiat</option>
      </select>
    </form>
  )
}

執行示例 »


透過對 <textarea><select> 進行這些微小更改,React 能夠以相同的方式處理所有輸入元素。


×

聯絡銷售

如果您想將 W3Schools 服務用於教育機構、團隊或企業,請傳送電子郵件給我們
sales@w3schools.com

報告錯誤

如果您想報告錯誤,或想提出建議,請傳送電子郵件給我們
help@w3schools.com

W3Schools 經過最佳化,旨在方便學習和培訓。示例可能經過簡化,以提高閱讀和學習體驗。教程、參考資料和示例會不斷審查,以避免錯誤,但我們無法保證所有內容的完全正確性。使用 W3Schools 即表示您已閱讀並接受我們的使用條款Cookie 和隱私政策

版權所有 1999-2024 Refsnes Data。保留所有權利。W3Schools 由 W3.CSS 提供支援