React-hook-form-mui(五):包含内嵌表单元素的表单

news/2024/7/15 18:14:26 标签: react.js, javascript, ecmascript

前言

在上一篇文章中,我们介绍了react-hook-form-mui如何与与后端数据联调。在实际项目中,从后端获取的数据可能是复杂的数据对象,本文将介绍,如何通过react-hook-form-mui实现一个包含内嵌表单元素的表单

Demo

以下代码实现了一个包含内嵌表单元素的表单的完整代码:

javascript">import React from 'react';
import { useForm } from 'react-hook-form';
import { Button, MenuItem } from '@mui/material';
import { FormContainer, TextFieldElement } from 'react-hook-form-mui';

//内嵌表单元素
const InnerForm = ({ index }: any) => {
  return (
    <>
      <TextFieldElement name={`items[${index}].name`} label="Name" />
      <TextFieldElement
        name={`items[${index}].quantity`}
        label="Quantity"
        type="number"
      />
    </>
  );
};

const MyForm = () => {
  const formContext = useForm({
    defaultValues: {
      firstName: '',
      lastName: '',
      email: '',
      gender: '',
      age: '',
      items: [{ name: '', quantity: '' }]
    }
  });
  const { watch } = formContext;

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

  return (
    <FormContainer
      formContext={formContext}
      onSuccess={(data) => {
        onSubmit(data);
      }}
    >
      <TextFieldElement name="firstName" label="First Name" />
      <TextFieldElement name="lastName" label="Last Name" />
      <TextFieldElement name="email" label="Email" />
      <TextFieldElement select name="gender" label="Gender">
        <MenuItem value="male">Male</MenuItem>
        <MenuItem value="female">Female</MenuItem>
      </TextFieldElement>
      <TextFieldElement name="age" label="Age" type="number" />
      {watch('items')?.map((_, index) =>
        <InnerForm key={index} index={index} />
      )}
      //像数组中插入表新的元素
      <Button
        type="button"
        onClick={() => watch('items').push({ name: '', quantity: '' })}
      >
        Add Item
      </Button>
      <Button type="submit">Submit</Button>
    </FormContainer>
  );
};

export default MyForm;

解析

javascript">//内嵌表单元素
const InnerForm = ({ index }: any) => {
  return (
    <>
      <TextFieldElement name={`items[${index}].name`} label="Name" />
      <TextFieldElement
        name={`items[${index}].quantity`}
        label="Quantity"
        type="number"
      />
    </>
  );
};

以上代码是实现内嵌表单元素的关键代码,了解以上代码,我们需要了解react-hook-form-mui的核心理念。它是通过获取表单元素的name,生成数据结构数。因此,对于内嵌的组件而言,我们需要通过index来给name赋值。这样就可以获取到内嵌表单元素的表单值。

总结

以上是关于React-hook-form-mui的内嵌表单元素的讲解。希望本文会对你有所帮助。如果有什么问题,可在下方留言沟通。


http://www.niftyadmin.cn/n/5223759.html

相关文章

【开题报告】基于机器学习的高速铁路动检数据异常检测算法

文献综述&#xff1a; 国内研究现状 我国铁路历来重视对轨道的检查和监测,并有完整的检查制度和严格检查标准。轨道检测基本分为静态检测和动态检测两大类静态检测主要是复测及限界检查、轨道静态检查、钢轨检查、春秋季检查和量具检查:动态检测则是以轨道检查车为主,并辅助车载…

高德开始“跑腿”

在这个万物皆可到家的时代&#xff0c;外卖已经不仅仅只送餐饮了&#xff0c;无论是鲜花、生活用品&#xff0c;亦或是其他急需品&#xff0c;只需要一个订单&#xff0c;就能够通通搞定。而随着消费者需求的增加&#xff0c;以即时物流为代表的新业态也顺势而起&#xff0c;并…

数据结构-01-数组

每一种编程语言中&#xff0c;基本都会有数组这种数据类型。不过&#xff0c;它不仅仅是一种编程语言中的数据类型&#xff0c;还是一种最基础的数据结构。 1-数组的概念和特性 数组&#xff08;Array&#xff09;是一种线性表数据结构。它用一组连续的内存空间&#xff0c;来…

Spark---SparkCore(五)

五、Spark Shuffle文件寻址 1、Shuffle文件寻址 1&#xff09;、MapOutputTracker MapOutputTracker是Spark架构中的一个模块&#xff0c;是一个主从架构。管理磁盘小文件的地址。 MapOutputTrackerMaster是主对象&#xff0c;存在于Driver中。MapOutputTrackerWorker是从对…

Android12强制所有应用跟随gsensor旋转

前言 Android12系统中如果机器带gsensor,竖屏应用如果固定了竖屏,当机器旋转为横屏,竖屏应用是不会转到横屏显示的,还是竖屏显示。抖音这种app就是这样的。因为app里面manifest文件中通过android:screenOrientation固定住了竖屏显示。如果要让横屏的时候app也能够横屏显示,…

中小型工厂如何进行数字化转型

随着科技的快速发展和市场竞争的日益激烈&#xff0c;中小型工厂面临着诸多挑战。为了提高生产效率、降低成本、优化资源配置&#xff0c;数字化转型已成为中小型工厂发展的必经之路。中小型工厂如何进行数字化转型呢&#xff1f; 一、明确数字化转型目标 在进行数字化转型之前…

python循环调用http示例(一定时间duration内,每隔时间interval去调用一次)call_http()

文章目录 直接上代码 直接上代码 #!/usr/bin/env python3 # -*- coding: utf-8 -*- import requests encoding utf-8def call_http_duration(server_ip, duration, interval):"""在时间 duration 内&#xff0c;每隔interval去调用 call_http(server_ip) 函数…

宠物网站的技术 SEO:完整指南

您是宠物行业网站的从业者吗&#xff1f;那么您一定知道&#xff0c;当人们寻找与宠物相关的资源时&#xff0c;在搜索引擎结果中排名靠前有多么重要。 这就是技术SEO的用武之地&#xff01;它正在调整您网站的后端代码和服务器配置&#xff0c;以在 SERP 中排名更高。 在此&…