当前位置:首页 > React

如何在react中创建表单

2026-01-25 07:16:32React

使用React Hook Form创建表单

React Hook Form是一个流行的轻量级库,用于高效管理表单状态和验证。安装依赖后,通过useForm钩子初始化表单控制。

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")} placeholder="Username" />
      <input {...register("password")} type="password" placeholder="Password" />
      <button type="submit">Submit</button>
    </form>
  );
}

使用Formik与Yup验证

Formik提供表单状态管理,结合Yup可实现声明式验证。定义验证模式后传递给Formik的validationSchema属性。

import { Formik, Field, Form } from 'formik';
import * as Yup from 'yup';

const validationSchema = Yup.object().shape({
  email: Yup.string().email().required(),
  password: Yup.string().min(8).required()
});

function FormikForm() {
  return (
    <Formik
      initialValues={{ email: '', password: '' }}
      validationSchema={validationSchema}
      onSubmit={(values) => console.log(values)}
    >
      <Form>
        <Field name="email" type="email" placeholder="Email" />
        <Field name="password" type="password" placeholder="Password" />
        <button type="submit">Submit</button>
      </Form>
    </Formik>
  );
}

原生React受控组件

通过React的useState管理表单数据,每个输入字段绑定valueonChange事件实现双向绑定。

import { useState } from 'react';

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

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

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

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

动态表单字段管理

对于需要动态增减的表单字段,使用数组存储字段数据,通过索引控制每个字段的状态。

function DynamicForm() {
  const [fields, setFields] = useState([{ value: '' }]);

  const addField = () => setFields([...fields, { value: '' }]);

  const removeField = (index) => {
    const newFields = [...fields];
    newFields.splice(index, 1);
    setFields(newFields);
  };

  const handleChange = (index, e) => {
    const newFields = [...fields];
    newFields[index].value = e.target.value;
    setFields(newFields);
  };

  return (
    <form>
      {fields.map((field, i) => (
        <div key={i}>
          <input
            value={field.value}
            onChange={(e) => handleChange(i, e)}
          />
          <button type="button" onClick={() => removeField(i)}>Remove</button>
        </div>
      ))}
      <button type="button" onClick={addField}>Add Field</button>
    </form>
  );
}

文件上传处理

通过<input type="file">捕获文件,使用FormData对象处理文件上传请求。

如何在react中创建表单

function FileUploadForm() {
  const [file, setFile] = useState(null);

  const handleSubmit = async (e) => {
    e.preventDefault();
    const formData = new FormData();
    formData.append('file', file);

    // 替换为实际API端点
    await fetch('/api/upload', {
      method: 'POST',
      body: formData
    });
  };

  return (
    <form onSubmit={handleSubmit}>
      <input 
        type="file" 
        onChange={(e) => setFile(e.target.files[0])} 
      />
      <button type="submit">Upload</button>
    </form>
  );
}

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

相关文章

vue实现新增表单

vue实现新增表单

Vue 新增表单实现方法 使用 v-model 绑定表单数据 在 Vue 中通过 v-model 指令实现表单数据的双向绑定。在 data 中定义表单数据对象,每个表单项对应一个属性。 data()…

vue实现多表单

vue实现多表单

Vue 实现多表单的方法 在 Vue 中实现多表单可以通过多种方式完成,以下是一些常见的方法: 动态表单生成 使用 v-for 动态生成多个表单,结合数组或对象存储表单数据。这种方法适合表单结构相似…

vue 实现表单验证

vue 实现表单验证

使用 Vue 内置验证指令 Vue 提供了一些内置指令用于表单验证,例如 v-model 和 v-bind。结合 HTML5 的表单验证属性,可以快速实现基础验证。 <template>…

vue表单实现双向绑定

vue表单实现双向绑定

Vue 表单双向绑定实现方法 Vue 通过 v-model 指令实现表单元素与数据的双向绑定。以下是常见表单元素的双向绑定示例: 文本输入框 <input type="text" v-mode…

vue表单验证如何实现

vue表单验证如何实现

使用 Vue 内置验证(v-model + 手动检查) 通过 v-model 绑定表单数据,在提交时手动检查字段有效性。适用于简单场景。 <template> <form @s…

vue实现表单打印

vue实现表单打印

Vue 实现表单打印的方法 在 Vue 中实现表单打印功能,可以通过多种方式完成。以下是几种常见的实现方法: 使用 window.print() 方法 创建一个专门用于打印的组件或页面,隐藏不需要打…