当前位置:首页 > 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实现登录功能通常需要结合后端API、状态管理以及路由控制。以下是常见的实现方式: 创建登录表单组件 在Vue组件中构建包含用户名和密码输入框的表单: <te…

vue如何实现分离

vue如何实现分离

Vue 实现组件分离的方法 Vue 可以通过多种方式实现组件分离,提升代码的可维护性和复用性。以下是几种常见的方法: 单文件组件 (SFC) Vue 的单文件组件(.vue 文件)将模板、脚本和样式…

vue如何实现目录组件

vue如何实现目录组件

实现目录组件的基本思路 在Vue中实现目录组件通常需要结合页面内容的结构化数据(如标题层级),通过动态渲染生成可交互的目录。核心步骤包括提取标题、生成目录结构、实现滚动联动等。 提取标题信息 通过…

vue如何实现默认页面

vue如何实现默认页面

Vue 实现默认页面的方法 在 Vue 项目中,通常需要设置一个默认页面(如首页或登录页)作为用户访问时的初始页面。可以通过路由配置实现。 配置路由默认跳转 在 Vue Router 中,使用 r…

h5如何实现vr效果

h5如何实现vr效果

使用WebXR API实现VR效果 WebXR是浏览器中实现VR/AR的核心API,支持设备姿态追踪、渲染交互等功能。需在支持WebXR的设备(如Oculus、HTC Vive)或浏览器模拟环境中运行…

h5如何实现定位

h5如何实现定位

使用HTML5 Geolocation API HTML5提供了Geolocation API,可以获取用户的地理位置信息。通过navigator.geolocation对象实现,支持获取经纬度、海拔…