当前位置: 首页 > news >正文

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

前言

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

Demo

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

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" /><TextFieldElementname={`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 (<FormContainerformContext={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} />)}//像数组中插入表新的元素<Buttontype="button"onClick={() => watch('items').push({ name: '', quantity: '' })}>Add Item</Button><Button type="submit">Submit</Button></FormContainer>);
};export default MyForm;

解析

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

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

总结

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

http://www.lryc.cn/news/251709.html

相关文章:

  • 【内网安全】搭建网络拓扑,CS内网横向移动实验
  • 1、输入一行字符,分别统计出其中的英文字母、空格、数字和其他字符的个数。
  • 戴尔科技推出全新96核Precision 7875塔式工作站
  • 论文阅读——DINOv
  • JOSEF电流继电器 DL-33 整定范围0.5-2A 柜内安装板前接线
  • RCE绕过
  • Qt应用开发--国产工业开发板全志T113-i的部署教程
  • css 常用动画效果
  • 【读书笔记】微习惯
  • Oracle SQL优化
  • C++实现ATM取款机
  • 【数电笔记】11-最小项(逻辑函数的表示方法及其转换)
  • Gradio库的安装和使用教程
  • 【BLE基础知识】--Slave latency设置流程及空中包解析
  • 数据结构之堆排序以及Top-k问题详细解析
  • ESP32-Web-Server 实战编程-通过网页控制设备多个 GPIO
  • 说一说MySQL中的锁机制
  • C++笔试训练day_1
  • 详解Spring对Mybatis等持久化框架的整合
  • [Electron] 将应用打包成供Ubuntu、Debian平台下安装的deb包
  • 7.24 SpringBoot项目实战【审核评论】
  • Java实现动态加载的逻辑
  • 数据库的设计规范
  • 正则表达式从放弃到入门(2):grep命令详解
  • 用Java写一个王者荣耀游戏
  • 基于SSM的新闻网站浏览管理实现与设计
  • 【蓝桥杯软件赛 零基础备赛20周】第6周——栈
  • CWE/SANS TOP 25 2022
  • Qt 天气预报项目
  • 新知识-Tuple元组的使用