Menu
×
   ❮     
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO 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 Hooks 部分。

示例

使用 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 语法。

要更新状态,请在属性名称周围使用方括号 [方括号表示法]。

示例

编写一个具有两个输入字段的表单

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 中的首选方法。


文本区域

React 中的文本区域元素略微不同于普通的 HTML。

在 HTML 中,文本区域的值是在开始标签 <textarea> 和结束标签 </textarea> 之间的文本。

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

在 React 中,文本区域的值放置在 value 属性中。我们将使用 useState Hook 来管理文本区域的值

示例

一个简单的文本区域,包含一些内容

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 属性定义

示例

一个简单的选择框,其中选定值“沃尔沃”在构造函数中初始化

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 能够以相同的方式处理所有输入元素。


×

Contact Sales

If you want to use W3Schools services as an educational institution, team or enterprise, send us an e-mail:
[email protected]

Report Error

If you want to report an error, or if you want to make a suggestion, send us an e-mail:
[email protected]

W3Schools is optimized for learning and training. Examples might be simplified to improve reading and learning. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using W3Schools, you agree to have read and accepted our terms of use, cookie and privacy policy.

Copyright 1999-2024 by Refsnes Data. All Rights Reserved. W3Schools is Powered by W3.CSS.