当前位置:首页 > 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);
  }
};

处理多步骤表单

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

如何在 React 中创建表单

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>
);

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

相关文章

css 制作表单

css 制作表单

使用CSS制作表单的基本方法 创建表单时,HTML负责结构,CSS负责样式。表单元素包括输入框、按钮、下拉菜单等,通过CSS可以统一风格并提升用户体验。 HTML结构示例 <form cla…

vue表单实现全选

vue表单实现全选

Vue 表单实现全选功能 在 Vue 中实现表单全选功能,通常涉及一个全选复选框和多个子复选框。以下是实现方法: 基本实现 数据绑定 使用 v-model 绑定全选复选框和子复选框的状态,子复选框…

vue实现弹出表单

vue实现弹出表单

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

vue实现表单拖拽

vue实现表单拖拽

实现表单拖拽的基本思路 在Vue中实现表单拖拽功能通常需要结合HTML5的拖放API和Vue的数据绑定特性。通过监听拖放事件,动态更新表单元素的顺序或位置。 使用HTML5拖放API HTML5提供…

vue实现表单窗口

vue实现表单窗口

Vue 实现表单窗口的方法 使用 Vue 组件创建表单 创建一个 Vue 单文件组件(SFC),包含表单元素和提交逻辑。表单可以包含输入框、下拉菜单、复选框等常见元素。 <template&g…

vue实现流程表单

vue实现流程表单

Vue 实现流程表单的方法 使用动态组件实现步骤切换 在 Vue 中可以通过动态组件结合状态管理来实现流程表单的分步操作。定义一个父组件管理当前步骤,子组件处理各步骤的表单逻辑。 <templ…