首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Formik和Yup在FieldArray中进行条件验证

在使用Formik和Yup进行条件验证的情况下,FieldArray是一个重要的组件。FieldArray允许我们在表单中动态地添加或删除字段,而条件验证则允许根据特定条件对这些字段进行验证。

首先,让我们先了解一下Formik和Yup。Formik是一个用于构建React表单的库,它提供了处理表单状态、表单验证和表单提交等功能。Yup是一个JavaScript模式验证库,它可以帮助我们定义和验证表单的规则。

在使用FieldArray时,我们可以在Yup模式验证中使用when方法来执行条件验证。when方法接受两个参数:一个字段名称和一个配置对象。配置对象中可以定义验证规则,当指定的字段满足某个条件时,这些验证规则将被应用。

下面是一个示例,演示如何在FieldArray中使用Formik和Yup进行条件验证:

代码语言:txt
复制
import React from "react";
import { Formik, Form, Field, FieldArray } from "formik";
import * as Yup from "yup";

const validationSchema = Yup.object().shape({
  users: Yup.array().of(
    Yup.object().shape({
      name: Yup.string().when("age", {
        is: (age) => age >= 18,
        then: Yup.string().required("姓名不能为空"),
      }),
      age: Yup.number().required("年龄不能为空").positive("年龄必须是正数"),
    })
  ),
});

const initialValues = {
  users: [{ name: "", age: "" }],
};

const MyForm = () => {
  return (
    <Formik
      initialValues={initialValues}
      validationSchema={validationSchema}
      onSubmit={(values) => {
        console.log(values);
      }}
    >
      {(formik) => (
        <Form>
          <FieldArray name="users">
            {({ push, remove }) => (
              <div>
                {formik.values.users.map((user, index) => (
                  <div key={index}>
                    <Field name={`users[${index}].name`} placeholder="姓名" />
                    <Field name={`users[${index}].age`} placeholder="年龄" />
                    <button type="button" onClick={() => remove(index)}>
                      删除
                    </button>
                  </div>
                ))}
                <button
                  type="button"
                  onClick={() => push({ name: "", age: "" })}
                >
                  添加用户
                </button>
              </div>
            )}
          </FieldArray>
          <button type="submit">提交</button>
        </Form>
      )}
    </Formik>
  );
};

export default MyForm;

在上面的示例中,我们定义了一个名为users的FieldArray,其中包含了nameage两个字段。我们使用了Yup来定义验证规则。当age字段大于等于18时,name字段必填,否则不需要填写。另外,nameage字段都是必填的。

你可以根据具体的业务需求和表单结构来调整以上示例中的验证规则和字段。

以上示例中用到的相关产品:

  • Formik:Formik是一个用于构建React表单的库,提供了处理表单状态、表单验证和表单提交等功能。你可以在Tencent Cloud Form Component了解腾讯云相关产品。
  • Yup:Yup是一个JavaScript模式验证库,可以帮助我们定义和验证表单的规则。你可以在Tencent Cloud Schema Validation了解腾讯云相关产品。

希望以上解答对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

React 组件优化

使用时需要先下载: npm install formik --save Formik 库可以与 yup 库一块使用,库的作者也推荐搭配使用yup 是一个用于验证字段的库,它的用法类似于 React 的...yup使用之前也需要先下载。 用法 下面写个例子,一个表单,我们需要表单做验证验证不通过就提示用户为什么不对。... 组件比较复杂,构建 Formik 表单程序时,Formik 下面它的几个属性是需要设置的: initialValues 接收一个对象,表示初始化的表单控件的值,对象的键应是表单的...使用 Formik + yup 库实现了验证逻辑与组件的解耦,验证逻辑统一由 yup 管理。 相对于 redux-form 库,我觉得 formik 库更好用一些吧。... Formik 官网,作者也举例了使用 redux-form 的缺陷: 表单状态本质上是短暂的和局部的,并不需要 redux 对其进行跟踪; 使用 redux 管理状态时,状态更新要派发 action

7.2K20

Formik:让用户体验更加出色的表单解决方案

与其他库集成:Formik 可以与其他流行的库工具(如 Yup、React Hook Form)集成,提供更多的扩展性灵活性。...可以终端运行以下命令:yarn add formik。 引入 Formik需要使用 Formik 的组件,引入 Formik 组件。...可以组件的进口部分添加以下代码:import {Formik} from 'formik';。 创建 Formik 实例:组件创建一个新的 Formik 实例。...可以组件添加以下代码:。 设置验证规则:使用 Formik 的 validate 属性来设置验证规则。...数据录入:Formik 可以用于简化数据录入过程,提高数据的准确性完整性。 后台管理系统:Formik 可以用于构建后台管理系统的表单界面,方便管理员对数据进行操作和管理。

28810

Linux 如何使用 HAProxy、Nginx Keepalived 进行负载均衡?

现代网络应用,负载均衡是提高性能可靠性的关键因素之一。通过将请求分发到多个服务器上,负载均衡可以确保请求被合理地处理,并避免单点故障。... Linux 环境下,常用的负载均衡解决方案包括 HAProxy、Nginx Keepalived。本文将详细介绍如何使用这三个工具 Linux 实现负载均衡。1....结论使用 HAProxy、Nginx Keepalived 可以 Linux 环境实现高效的负载均衡解决方案。...本文中,我们详细介绍了 Linux 中使用 HAProxy、Nginx Keepalived 进行负载均衡的步骤配置。...在实践,要密切监控负载均衡器后端服务器的性能指标,定期进行性能调优监控,以保持系统的稳定高效运行。同时,确保服务器和服务的安全配置,以防止潜在的安全威胁。

1.8K00

使用 WPADPAC JScriptwin11进行远程代码执行

IT 的工程决策通常是不完整的信息时间压力下做出的,IT 堆栈的一些奇怪之处最好用“当时似乎是个好主意”来解释。...初步调查显示,负责执行这些配置文件的 JS 引擎是 jscript.dll - 也支持 IE7 IE8 的旧版 JS 引擎(如果使用适当的脚本属性, IE7/8 兼容模式下仍然可以 IE11 访问...Web 代理自动发现 如上所述,WPAD 将查询 DHCP DNS(按此顺序)以获取要连接的 URL - 如果没有来自 DNS 的响应,显然也可以使用 LLMNR Netbios。...这篇旧的 MSDN 文章描述了 JScript 的垃圾收集器. JScript 使用非分代标记清除垃圾收集器。本质上,每当触发垃圾回收时,它都会标记所有 JScript 对象。...该表按触发漏洞所需的类兼容模式对漏洞进行了细分。

5.2K470

使用 WPADPAC JScriptwin11进行远程代码执行3

使用长度为 300 170 个元素的数组触发 Array.sort。这会分配一个大小为 (170+1)*48=8208 字节的缓冲区。...我们的例子,这个指针指向变量 1 之前的 16 个字节。这基本上意味着变量 2 的最后 8 字节 qword 变量 1 的第一个 8 字节 qword 重叠。...我们按以下步骤进行: 从任何 JScript 对象的 vtable 读取 jscript.dll 的地址 通过读取jscript.dll的导入表读取kernel32.dll的地址 通过读取kernel32...这意味着漏洞利用在系统上可以访问修改的内容非常有限,特别是利用后或系统重新启动后持续存在。虽然 Windows 总是可能存在未修复的权限提升,但我们不需要找到新的漏洞来提升我们的权限。...因此,我们 C++ 实现了我们自己的更简单的版本,它使用CreateProcessWithToken API直接生成带有 SYSTEM 令牌的任意进程。

2K310

使用 WPADPAC JScriptwin11进行远程代码执行1

开发 了解 JScript VAR 字符串 由于在这篇博文的其余部分,我们将大量讨论 JScript VAR 字符串,因此深入了解这些漏洞的工作原理之前先描述这些内容是很有用的。...像这样越界读取的字符串内容将在一个可以检查的字符串变量返回给调用者。 我们将要使用第二次越界读取,但首先我们需要弄清楚如何将受控数据放入start_indexend_index 。...特制琴弦的内容现阶段不重要,但在下一阶段会很重要,所以会在此进行说明。另请注意,通过检查堆元数据,我们可以轻松确定进程正在使用哪个堆实现(段堆与 NT 堆)。...图像 2 3 显示了信息泄漏前后使用堆历史查看器创建的堆可视化。...第 2 阶段:溢出 漏洞利用的第 2 阶段,我们将使用这个堆溢出漏洞 Array.sort

7.8K950

【实践操作】 iOS11使用Core ML TensorFlow对手势进行智能识别

计算机科学,手势识别是通过数学算法来识别人类手势的一个议题。用户可以使用简单的手势来控制或与设备交互,让计算机理解人类的行为。...这篇文章将带领你实现在你自己的应用中使用深度学习来识别复杂的手势,比如心形、复选标记或移动设备上的笑脸。我还将介绍使用苹果的Core ML框架(iOS11的新框架)。 ?...屏幕上随便划动两下,手机就会对复杂的手势进行实时识别 这项技术使用机器学习来识别手势。本文中的一些内容是特定于iOS系统的,但是Android开发者仍然可以找到一些有用的信息。...教程地址:https://www.tensorflow.org/get_started/mnist/pros 我用来训练导出模型的一组脚本一个叫做“gesturelearner”的文件夹。...事实上,即使创建实例之后,这个模型第一次评估的速度也很慢。当应用程序启动时,我用一个空白图像对网络进行评估,这样用户开始做手势时不会看到延迟。

2.7K60

Kafka第一天笔记

可以将一些比较耗时的操作放在其他系统,通过消息队列将需要进行处理的消息进行存储,其他系统可以消费消息队列的数据 比较常见的:发送短信验证码、发送邮件 ?...系统解耦 原先一个微服务是通过接口(HTTP)调用另一个微服务,这时候耦合很严重,只要接口发生变化就会导致系统不可用 使用消息队列可以将系统进行解耦合,现在第一个微服务可以将消息放入到消息队列...,另一个微服务可以从消息队列把消息取出来进行处理。...进行系统解耦 ? 流量削峰 因为消息队列是低延迟、高可靠、高吞吐的,可以应对大量并发 ? 日志处理 可以使用消息队列作为临时存储,或者一种通信管道 ?...一个topic的消息可以分布topic的不同partition replica:副本,实现Kafkaf集群的容错,实现partition的容错。

58830

2022 年的 React 生态

所有的方案大型 React 应用中都适用。最后一点提示:如果你想在 React 中有条件地应用一个 className,可以使用像 clsx 这样的工具。...它提供了从验证(一般会集成 yup zod)到提交到表单状态管理所需的一切。之前流行的另一种方式是 Formik。两者都是不错的解决方案。...建议: React Hook Form 集成 yup 或 zod 进行表单验证 如果已经使用组件库了,看看内置的表单能不能满足需求 链接: React Hook Form:https://react-hook-form.com...,你可能希望引入带有注册、登录退出等功能的身份验证。...当你某个时间点再次运行测试时,将创建另一个快照,这个快照会前一个快照进行 diff。如果存在差异,Jest 将发出警告,你要么接受这个快照,要么更改一下组件的实现。

5.8K20

Typo3 CVE-2019-12747 反序列化漏洞分析

TCA 进行分析之前,我们需要了解下Typo3的TCA(Table Configuration Array),Typo3的代码,它表示为$GLOBALS['TCA']。...Typo3,TCA算是对于数据库表的定义的扩展,定义了哪些表可以Typo3的后端可以被编辑,主要的功能有 表示表与表之间的关系 定义后端显示的字段布局 验证字段的方式 这次漏洞的两个利用点分别出在了...77.jpg 这样一来,在这个请求过程进行反序列化的字符串我们就可以控制了。 表单中提交任意符合数组格式的输入,在后端代码中都会被解析,然后后端根据TCA来进行判断并处理。...$fieldArray。...的值为pages $id存在NEW字符串 既然正常请求可以直接断调用fillInFieldArray处,正常请求,第一条、第三条第四条都是成立的。

2.4K10

Fabric private data入门实战

目前Hyperledger Fabric实现数据隐私的方法是使用通道。...可能你需要跟踪这个数据,因为你需要验证销售marble的人是否是真正的持有人。一个假想的marble审计公司可以作为你的合伙人来验证这一点。...如果你使用通道,那么所有的你的行为将记录在账本状态,而任何人都看得到。 fabric private data是如何解决上述问题的? ?...这些数据集允许添加一些额外的数据,主要的数据还是保存在主状态账本。 ? 被授权的节点将可以看得到主账本上的数据哈希,以及私有数据库的真实数据。...但是,其中某些数据是私有的,并且保存在私有数据集中,因此只能被数据集配置文件定义的对等节点访问。 我们建议公开私有数据集中使用相同的键来保存数据,以便更易于数据的提取操作。

1.2K40

java反射原来是这么玩的(反射一开,谁都不爱)

这个代号为Oak(橡树)的版本,发布后的第二年,1997年02月19日,发布jdk 1.1版本,这次版本发布引入了反射机制。...、进行赋值、调用。...正因为反射的强大,java世界里运用的地方有很多,比如:Java类加载初始化、JavaRTTI、Spring的IOC,。 如此广泛的运用,只能说反射除了强,用起来肯定很爽。...他讲解他是如何运用反射时,嘴角总是压抑不住的微笑,这种迷恋反射的样子,像极了爱情。 正所谓:反射一开,谁都不爱。(傲娇) 下面就看看反射究竟是如何在程序中使用的。...反射的概述使用 反射的概述 JAVA反射机制是在运行状态, 对于任意一个类,都能够知道这个类的所有属性方法; 对于任意一个对象,都能够调用它的任意一个方法属性; 这种动态获取的信息以及动态调用对象的方法的功能称为

91630

2023 React 生态系统,以及我的一些吐槽……

这通常意味着将基于组件的状态副作用凑合在一起,或者使用更通用的状态管理库应用程序存储提供异步数据。 虽然大多数传统的状态管理库非常适合处理客户端状态,但在处理异步或服务器状态时效果不佳。...首先,服务器状态具有以下特点: 以你无法控制或拥有的远程位置持久存储 需要使用异步 API 进行获取更新 暗示共享所有权,并且可能被其他人在你不知情的情况下更改 如果不小心处理,可能会在应用程序变得...表单处理 Formik 面对现实吧, React 处理表单确实很冗长。更糟糕的是,大多数表单辅助工具做了太多的魔法,并且通常会伴随着显著的性能损耗。...Formik 是一个小型库,可以帮助您解决以下三个最令人讨厌的问题: 将值放入取出表单状态 验证错误消息 处理表单提交 通过将所有这些放在一个地方,Formik 可以让事情井然有序,使得测试、重构理解您的表单变得轻而易举...虽然后来他们添加了“向导”表单,但使用起来并不太直观。 此外,Formik 依赖于表单元素,并且控制 Redux 存储时存在一些挑战。

67430

2020 年你应该知道的 React 库

您引入路由以前,您可以先尝试 React 的条件渲染,它虽然不是路由的合理替代,但是小型应用以及足够用了。...建议: ESLint Prettier React 认证 较大的 React 应用程序,您可能希望引入具有注册、登录退出功能的身份验证。此外,密码重置密码更改功能往往是需要的。...最终,您会发现自己使用 Enzyme 或 React Testing Library (这两个都在 Jest 测试环境中使用)来进行更详细的测试功能集。...因为您总是必须呈现组件的列表。由于 JSX 是 HTML JavaScript 的混合物,所以您可以使用 JavaScript 在数组上进行映射并返回 JSX。...,我只能想到以下内容,因为我没有 React 中使用任何其他内容: Draft.js Slate React 的支付 其他网络应用一样,最常见的支付提供商是 Stripe PayPal。

14.4K40
领券