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

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" />
      <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;

解析

//内嵌表单元素
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.kler.cn/a/154163.html

相关文章:

  • Springboot 整合 Java DL4J 打造金融风险评估系统
  • 微信小程序-prettier 格式化
  • 什么是JSX?
  • Ubuntu22.04基于ROS2-Humble安装moveit2教程(亲测)
  • 如何在 Ubuntu 上安装 Emby 媒体服务器
  • django解决跨域问题
  • 蓝桥杯每日一题2023.12.2
  • 微服务实战系列之Cache
  • 华为OD机试真题-两个字符串间的最短路径问题-2023年OD统一考试(C卷)
  • #Css篇:实现一个元素水平和垂直居中实现左右固定,中间自身适应布局 左侧固定 右侧自适应
  • 【小布_ORACLE笔记】Part11-1--RMAN Backups
  • Maven安装
  • LeeCode前端算法基础100题(5)- 最长公共前缀
  • git修改远程地址
  • 【Linux】信号概念和信号的产生
  • Hdoop学习笔记(HDP)-Part.07 安装MySQL
  • 计算机体系结构补充篇----静态超标量流水线及循环展开(一)
  • rtmp 协议详解
  • 【1】基于多设计模式下的同步异步日志系统
  • SHEIN出口儿童玩具加拿大站CCPSA安全标准办理解析
  • 如何使用Go与MQTT进行通信
  • 多线程(初阶六:单例模式)
  • 应用于智慧电力安全的AI边缘计算盒子+AI算法软硬一体化方案
  • 蓝桥杯-02-python组考点与14届真题
  • 让你的前端代码飞起来:如何实现自动化测试?
  • H264初探