美文网首页
React-hook-form-mui(五):包含内嵌表单元素的

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

作者: zewweb | 来源:发表于2023-05-27 07:02 被阅读0次

关键词 React MUI 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的内嵌表单元素的讲解。希望本文会对你有所帮助。如果有什么问题,可在下方留言沟通。

相关文章

  • 小组分享--HTML(5)嵌套规则

    HTML/XHTML嵌套规则 块级元素与块级元素平级、内嵌元素与内嵌元素平级 块级元素可以包含内联元素或某些块元素...

  • 简单介绍 HTML 表单的用法

    HTML 表单用于收集用户输入, 元素定义 HTML 表单。HTML 表单包含表单元素,表单元素指的是不同类型的...

  • 企业级规范

    html标签企业级规范 一、 块级元素与块级元素平级,内嵌元素与内嵌元素平级 二、块元素可以包含行内元素或者某些块...

  • HTML表单的用法

    1、关于form表单的基础 form表单:是一个包含表单元素的区域;作用,用于包裹表单元素。 表单元素:是允许用户...

  • HTML表单的用法

    html表单用于搜集不同类型的用户输入。

    元素 form元素定义html表单 HTML 表单包含表单元...

  • 高效易用表单设计详细指南

    表单是什么? 表单是一个包含表单元素的区域,使用表单标签( )定义。 表单元素是允许用户在表单中输入信息的元素,主...

  • HTML基础(3)

    表单元素 表单是一个包含表单元素的区域,表单元素是允许用户在表单中输入内容,比如:文本域(textarea)、下拉...

  • HTML表单的简单用法

    HTML表单的简单用法:HTML表单用于搜集不同类型的用户输入。 元素定义HTML表单。HTML表单包含表单元素。...

  • HTML 表单用法

    表单是一个包含表单元素的区域表单元素指的是不同类型的 input 元素、复选框、单选按钮、提交按钮等等。表单元素必...

  • HTML 表单的用法

    HTML 表单用于搜集不同类型的用户输入 元素定义 HTML 表单: 所有属性如下 HTML 表单包含表单元素表...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/jiyhedtx.html