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

分享给朋友:

相关文章

php如何实现静态化

php如何实现静态化

PHP 实现静态化的方法 使用 ob_start() 和 ob_get_contents() 利用 PHP 的输出缓冲功能捕获动态生成的页面内容,将其保存为静态文件。这种方法适用于内容不频繁变化的页面…

vue如何实现mvvm

vue如何实现mvvm

Vue 的 MVVM 实现原理 Vue 通过数据绑定和响应式系统实现 MVVM(Model-View-ViewModel)模式。其核心在于将数据模型(Model)与视图(View)通过 ViewMod…

vue如何实现排序

vue如何实现排序

实现数组排序 在Vue中可以通过计算属性或方法对数组进行排序。使用JavaScript的sort()方法结合Vue的响应式特性实现动态排序。 data() { return { item…

vue如何实现tap

vue如何实现tap

Vue 中实现类似移动端 tap 事件的方法 在 Vue 中可以通过以下几种方式实现类似移动端 tap(轻触)事件的效果: 使用第三方库 安装 v-tap 指令库可以快速实现 tap 事件: np…

java如何实现多继承

java如何实现多继承

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

vue如何实现ifream

vue如何实现ifream

Vue 中实现 iframe 的方法 在 Vue 中可以通过多种方式实现 iframe 的嵌入和控制。以下是几种常见的方法: 使用 HTML 原生 iframe 标签 在 Vue 模板中直接使用…