当前位置:首页 > React

如何在 React 中创建表单

2026-01-25 13:56:30React

使用受控组件创建表单

在 React 中,受控组件是处理表单输入的标准方式。每个表单元素的值由 React 状态管理,并通过 onChange 事件更新。

import { useState } from 'react';

function MyForm() {
  const [formData, setFormData] = useState({
    username: '',
    password: ''
  });

  const handleChange = (e) => {
    const { name, value } = e.target;
    setFormData(prev => ({
      ...prev,
      [name]: value
    }));
  };

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log(formData);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input
        type="text"
        name="username"
        value={formData.username}
        onChange={handleChange}
      />
      <input
        type="password"
        name="password"
        value={formData.password}
        onChange={handleChange}
      />
      <button type="submit">Submit</button>
    </form>
  );
}

使用非受控组件创建表单

非受控组件通过 ref 直接访问 DOM 元素获取表单值,适合简单表单或需要集成第三方库时使用。

import { useRef } from 'react';

function MyForm() {
  const usernameRef = useRef();
  const passwordRef = useRef();

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log({
      username: usernameRef.current.value,
      password: passwordRef.current.value
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      <input type="text" ref={usernameRef} />
      <input type="password" ref={passwordRef} />
      <button type="submit">Submit</button>
    </form>
  );
}

使用表单库简化开发

对于复杂表单,推荐使用 Formik 或 React Hook Form 等库。这些库提供验证、错误处理等高级功能。

React Hook Form 示例:

import { useForm } from 'react-hook-form';

function MyForm() {
  const { register, handleSubmit } = useForm();

  const onSubmit = data => console.log(data);

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input {...register("username")} />
      <input type="password" {...register("password")} />
      <button type="submit">Submit</button>
    </form>
  );
}

表单验证实现

基本验证可以直接在受控组件中实现,更复杂的验证建议使用 Yup 等库配合表单库使用。

const [errors, setErrors] = useState({});

const validate = () => {
  const newErrors = {};
  if (!formData.username) newErrors.username = 'Required';
  if (formData.password.length < 6) newErrors.password = 'Too short';
  setErrors(newErrors);
  return Object.keys(newErrors).length === 0;
};

const handleSubmit = (e) => {
  e.preventDefault();
  if (validate()) {
    console.log(formData);
  }
};

处理多步骤表单

对于需要分步骤填写的长表单,可以使用状态管理来跟踪当前步骤。

const [step, setStep] = useState(1);
const [formData, setFormData] = useState({
  /* initial data */
});

const nextStep = () => setStep(prev => prev + 1);
const prevStep = () => setStep(prev => prev - 1);

return (
  <form>
    {step === 1 && (
      <Step1 
        data={formData} 
        onChange={handleChange} 
        onNext={nextStep}
      />
    )}
    {step === 2 && (
      <Step2
        data={formData}
        onChange={handleChange}
        onPrev={prevStep}
        onSubmit={handleSubmit}
      />
    )}
  </form>
);

如何在 React 中创建表单

标签: 表单如何在
分享给朋友:

相关文章

vue 实现表单

vue 实现表单

Vue 表单实现方法 Vue.js 提供了多种方式实现表单,包括双向数据绑定、表单验证和动态表单生成。以下是常见的实现方法: 基础表单绑定 使用 v-model 指令实现表单元素与数据的双向绑定:…

php实现表单

php实现表单

PHP 表单基础实现 创建一个简单的 PHP 表单需要 HTML 表单结构和 PHP 处理脚本。以下是一个完整的示例: HTML 表单部分 (form.html) <form action=…

jquery提交表单

jquery提交表单

使用 jQuery 提交表单 jQuery 提供了多种方法来提交表单,以下是常见的几种实现方式: 监听表单提交事件 通过监听表单的 submit 事件,可以阻止默认提交行为并执行自定义逻辑(如 A…

vue实现切换表单

vue实现切换表单

Vue 实现表单切换的方法 动态组件切换 使用 Vue 的 <component :is="currentComponent"> 动态加载不同表单组件,通过 v-model 绑定数据。…

vue实现弹出表单

vue实现弹出表单

使用 Vue 实现弹出表单 基础实现(基于 v-if 和 v-show) 通过 v-if 或 v-show 控制表单的显示与隐藏,适合简单场景。 <template> <div…

vue表单全选实现

vue表单全选实现

实现 Vue 表单全选功能 在 Vue 中实现表单全选功能可以通过以下方法完成: 数据绑定与事件处理 创建全选复选框和数据列表复选框,使用 v-model 双向绑定选中状态,监听全选复选框的 ch…