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

在父组件中组合表单

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

react如何实现两个FORM

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

共享表单状态管理

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

react如何实现两个FORM

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

分享给朋友:

相关文章

vue如何实现递归

vue如何实现递归

递归组件的实现方法 在Vue中实现递归组件通常用于渲染树形结构或嵌套数据。核心思路是组件在其模板中调用自身,但需注意终止条件以避免无限循环。 定义递归组件 组件需设置name选项,才能在模板中调用自…

vue如何实现select

vue如何实现select

Vue 实现 Select 组件的方法 在 Vue 中实现 Select 组件可以通过原生 HTML <select> 元素或使用第三方 UI 库(如 Element UI、Ant Des…

java如何实现多继承

java如何实现多继承

在Java中,由于语言设计本身不支持多继承(即一个类不能直接继承多个父类),但可以通过以下方式间接实现类似多继承的效果: 使用接口实现多继承 接口允许一个类实现多个接口,从而继承多个抽象行为。接口中…

vue如何实现confirm

vue如何实现confirm

Vue 实现 Confirm 弹窗的方法 在 Vue 中实现确认弹窗(Confirm)可以通过多种方式,以下是几种常见的方法: 使用浏览器原生 confirm 最简单的实现方式是直接调用浏览器的原生…

vue 如何实现返回

vue 如何实现返回

Vue 实现返回功能的方法 使用 router.go(-1) 在 Vue 中可以通过 Vue Router 的 go 方法实现返回上一页的功能。在需要触发返回的按钮或方法中调用 this.$route…

vue如何实现修改

vue如何实现修改

修改 Vue 组件或数据 在 Vue 中修改数据或组件状态通常涉及响应式数据的更新、组件方法的调用或状态管理工具的使用。以下是几种常见场景的实现方式: 修改响应式数据 Vue 的响应式系统会自动追踪…