React-hook-form-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的内嵌表单元素的讲解。希望本文会对你有所帮助。如果有什么问题,可在下方留言沟通。文章来源地址https://www.toymoban.com/news/detail-772505.html

到了这里,关于React-hook-form-mui(五):包含内嵌表单元素的表单的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • element UI 组件封装--搜索表单(含插槽和内嵌组件)

    可根据需要,参考姓名和工作自行增加更多常用的默认搜索项 具体原理可参考 https://blog.csdn.net/weixin_41192489/article/details/127966234 可直接在 SearchForm 内部通过默认插槽添加更多搜索项 必要变量有 searchData 和 searchOption 必要方法有 reset

    2024年02月06日
    浏览(42)
  • vue3 antd项目实战——Form表单的重置【使用resetFields()重置form表单数据、清空输入框】

    文章内容 文章链接 Form表单 提交和校验 https://blog.csdn.net/XSL_HR/article/details/128495087?spm=1001.2014.3001.5501 Form表单的 嵌套使用 https://blog.csdn.net/XSL_HR/article/details/128488913?spm=1001.2014.3001.5501 Form表单的 动态校验规则 https://blog.csdn.net/XSL_HR/article/details/128437275?spm=1001.2014.3001.5501 往期文章

    2024年02月02日
    浏览(62)
  • form 表单恢复初始数据

    在前端,我们可以使用两种方法来保存表单数据:LocalStorage 和 Cookie。 使用 LocalStorage 保存数据:LocalStorage 是浏览器提供的一种本地存储机制,它允许将数据以键值对的形式存储在用户的浏览器中。要保存表单数据到 LocalStorage 中,可以使用 JavaScript 的 localStorage.setItem(key, v

    2024年02月13日
    浏览(36)
  • iview form 动态表单

    最开始用得网上得 发现前面得红色必选项跟着变换,但是表单验证输入了还是显示不能为空 然后我用了v-if    结果,红色星号在,表单验证确是可以的 最终解决方法: 用 v-show !!!!!!!! div v-show=\\\"baseForm.receipt == \\\'11\\\'\\\" div v-show=\\\"baseForm.receipt== \\\'12\\\" 把需要输入的用v-show来验证就好了

    2024年02月08日
    浏览(40)
  • form 校验多个表单

    有的时候,表单需要拆开多个,这时候就需要校验多个表单  

    2024年02月16日
    浏览(47)
  • Form Generator 扩展子表单组件之表单校验(超详细)

    form-generator的作者是这样介绍的:Element UI表单设计及代码生成器,可将生成的代码直接运行在基于Element的vue项目中;也可导出JSON表单,使用配套的解析器将JSON解析成真实的表单。 但目前它提供的组件并不能满足我们在项目中的使用。所以该专栏主要讲解如何在该项目中从零

    2024年02月16日
    浏览(71)
  • 记录--form 表单恢复初始数据

    在现代的 Web 开发中,表单是不可或缺的组件之一。用户可以通过表单输入和提交数据,而开发者则需要对这些数据进行处理和存储。然而,在某些情况下,我们可能需要重置表单并恢复到最初的状态。 本文介绍了如何使用 form 表单处理库来实现表单恢复初始数据的功能。通

    2024年02月13日
    浏览(33)
  • JQuery获取form表单数据

    获取表单数据的方式一: 获取表单数据的方式二:

    2024年02月13日
    浏览(44)
  • element UI —— form表单中Radio单选框进行切换 & 表单验证rule动态校验-validator & 保存前进行form表单校验后才能上传-validate

    element UI —— form表单中Radio单选框进行切换 表单验证rule动态校验-validator 保存前进行form表单校验后才能上传-validate 1、效果图 2、代码 结构 数据

    2024年02月07日
    浏览(54)
  • vue+element,form循环嵌套表单 、动态添加表单、嵌套表单自定义校验规则

    原文发布链接:https://juejin.cn/post/7181752966611730492 需求: 可点击新增,自动添加表单。(这个不难v-for即可) 可自定义方法校验添加的表单内容。(需要掌握element组件的规则,本人没有熟读官网,碰壁好多次才整理出来这篇文章。重要的事说3遍: 看官网看官网看官网 ) 效果

    2024年02月04日
    浏览(67)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包