当前位置:首页 > React

react如何实现两个FORM

2026-01-26 01:48:23React

实现两个表单的基本结构

在React中创建两个表单可以通过分别定义两个独立的表单组件实现。每个表单应包含自己的状态管理和提交逻辑。

function Form1() {
  const [formData, setFormData] = useState({ field1: '' });

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log('Form1 submitted:', formData);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input 
        value={formData.field1}
        onChange={(e) => setFormData({...formData, field1: e.target.value})}
      />
      <button type="submit">Submit Form 1</button>
    </form>
  );
}

function Form2() {
  const [formData, setFormData] = useState({ field2: '' });

  const handleSubmit = (e) => {
    e.preventDefault();
    console.log('Form2 submitted:', formData);
  };

  return (
    <form onSubmit={handleSubmit}>
      <input 
        value={formData.field2}
        onChange={(e) => setFormData({...formData, field2: e.target.value})}
      />
      <button type="submit">Submit Form 2</button>
    </form>
  );
}

在父组件中组合表单

将两个表单组件组合在一个父组件中,可以保持它们逻辑上的独立性同时共享同一个界面。

function App() {
  return (
    <div>
      <h3>Form 1</h3>
      <Form1 />
      <h3>Form 2</h3>
      <Form2 />
    </div>
  );
}

共享表单状态管理

如果需要两个表单共享状态或提交逻辑,可以使用状态提升到父组件。

function CombinedForms() {
  const [form1Data, setForm1Data] = useState({ field1: '' });
  const [form2Data, setForm2Data] = useState({ field2: '' });

  const handleSubmitAll = (e) => {
    e.preventDefault();
    console.log('Combined data:', { ...form1Data, ...form2Data });
  };

  return (
    <form onSubmit={handleSubmitAll}>
      <input 
        value={form1Data.field1}
        onChange={(e) => setForm1Data({...form1Data, field1: e.target.value})}
      />
      <input 
        value={form2Data.field2}
        onChange={(e) => setForm2Data({...form2Data, field2: e.target.value})}
      />
      <button type="submit">Submit Both Forms</button>
    </form>
  );
}

使用表单库简化开发

对于复杂表单场景,可以考虑使用Formik或React Hook Form等库来管理多个表单。

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

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

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

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

动态表单生成

当表单数量不固定时,可以通过数组映射动态生成多个表单。

function DynamicForms() {
  const [forms, setForms] = useState([
    { id: 1, value: '' },
    { id: 2, value: '' }
  ]);

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

  return (
    <form onSubmit={handleSubmit}>
      {forms.map((form) => (
        <input
          key={form.id}
          value={form.value}
          onChange={(e) => {
            const updatedForms = forms.map(f => 
              f.id === form.id ? { ...f, value: e.target.value } : f
            );
            setForms(updatedForms);
          }}
        />
      ))}
      <button type="submit">Submit</button>
    </form>
  );
}

react如何实现两个FORM

分享给朋友:

相关文章

vue中如何实现循环

vue中如何实现循环

在 Vue 中实现循环 Vue 提供了 v-for 指令用于实现循环渲染列表数据。v-for 可以遍历数组、对象或数字范围,生成动态的 DOM 元素。 遍历数组 使用 v-for 遍历数组时,语法为…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中实现数组排序可以通过computed属性或methods来处理。假设有一个数组items,可以创建一个计算属性返回排序后的数组: data() { return {…

vue如何实现冒泡

vue如何实现冒泡

Vue 实现冒泡排序的步骤 在 Vue 中实现冒泡排序,可以通过数据绑定和计算属性来动态展示排序过程。以下是一个完整的实现示例。 示例代码 <template> <div&g…

如何实现vue表格联动

如何实现vue表格联动

实现 Vue 表格联动的方法 数据绑定与响应式更新 通过 Vue 的响应式特性,将多个表格的数据绑定到同一个数据源或计算属性。当一个表格的数据发生变化时,另一个表格会自动更新。例如: data()…

vue中如何实现循环

vue中如何实现循环

循环渲染列表数据 在Vue中,使用v-for指令实现循环渲染。基本语法为v-for="(item, index) in items",其中items是数据源数组,item是当前遍历的元素,index是…

js如何实现继承

js如何实现继承

原型链继承 通过将子类的原型指向父类的实例实现继承。子类实例能够访问父类原型上的属性和方法。 function Parent() { this.name = 'parent'; } Parent…