- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所以我在我制作的多步骤表单上进行 Yup 和 Formik 验证时遇到了一些麻烦。我试图在验证为 true 时启用该按钮,并在验证再次变为 false 时禁用该按钮。我希望它是假的,而没有写任何东西,如果是的话,它必须是 2 个字符或更多。
const pages = [<Page1 />, <Page2 />, <Page3 />, <Page4 />];
const SignupSchema = Yup.object().shape({
kg: Yup.string()
.min(2, "Too Short!")
.max(50, "Too Long!")
.required("Reqasduired"),
lastName: Yup.string()
.min(2, "Too Short!")
.max(50, "Too Long!")
.required("Required"),
email: Yup.string()
.email("Invalid email")
.required("Required")
});
const SignUp = () => {
const state = useSelector((state: RootState) => state);
const dispatch = useDispatch();
return (
<>
<Logo />
<div className="signup-container">
<Formik
initialValues={{ kg: "", lastName: "", email: "" }}
onSubmit={values => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
}, 500);
}}
validationSchema={SignupSchema}
>
{({ isValid, errors, touched }) => (
<Form>
<LinearProgress variant="determinate" />
<div className="questions">{pages[state]}</div>
<button
type="button"
onClick={() => {
dispatch(decrement());
}}
>
Prev
</button>
<button
type="submit"
disabled={isValid}
onClick={() => {
pages.length - 1 <= state
? console.log("No more pages")
: dispatch(increment());
}}
>
Next
</button>
</Form>
)}
</Formik>
</div>
</>
);
};
最佳答案
有两件事你必须改变。首先将提交按钮中的 prop 更改为 disabled={!isValid}
所以当它无效时它将被禁用,而不是当它有效时被禁用。
然后添加validateOnMount
支持<Formik>
确保它在安装时验证并且您的按钮将被禁用(当初始值无效时)。
import React from "react";
import { Formik, Form, Field } from "formik";
import * as Yup from "yup";
const SignupSchema = Yup.object().shape({
kg: Yup.string()
.min(2, "Too Short!")
.max(50, "Too Long!")
.required("Reqasduired"),
lastName: Yup.string()
.min(2, "Too Short!")
.max(50, "Too Long!")
.required("Required"),
email: Yup.string()
.email("Invalid email")
.required("Required")
});
export default function App() {
return (
<Formik
initialValues={{ kg: "", lastName: "", email: "" }}
validateOnMount={true}
onSubmit={values => {
setTimeout(() => {
alert(JSON.stringify(values, null, 2));
}, 500);
}}
validationSchema={SignupSchema}
>
{props => {
const { isValid } = props;
return (
<Form>
<label>KG: </label>
<Field name="kg" />
<br />
<label>Last name: </label>
<Field name="lastName" />
<br />
<label>Email: </label>
<Field name="email" type="email" />
<br />
<button type="submit" disabled={!isValid}>
Next
</button>
<pre>{JSON.stringify(props, null, 2)}</pre>
</Form>
);
}}
</Formik>
);
}
关于javascript - Formik 和 Yup 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59666542/
我正在处理多种表单。在某些情况下,表格具有相似的字段,例如姓名、电话号码、帐号等。我也在使用 formik 。我为每个表单创建了架构文件 (schema.js)。在里面我列出了所有模式验证并返回该模式
我在“react”中创建了一个多步骤表单:“^17.0.1”、“yup”:“^0.29.3”和“formik”:“^2.2.3”。 我想检查用户输入的生日 (dobD) 根据出生月份 (dobM) 和
我如何基本上创建这个 https://design-system.service.gov.uk/patterns/dates/在带有 yup 验证的 formik 中。 因此 day、month 和
我有两个与 Yup 验证库相关的问题...这些问题是相互关联的。 第一个问题。 有什么方法可以启用验证并返回验证中的所有错误。看例子: const petSchema = yup.string()
我有一个架构: const SignupSchema = Yup.object().shape({ decimal: Yup.number().integer('invalid decimal')
如何实现 1 个字段的值应始终大于另一个字段的值。 这是我的模式 value: Yup.number().required(''), value2: Yup.number().when('
在我的 JavaFX 应用程序中,我使用 SceneBuilder by Gluon 。场景的预览具有 Y Down 坐标系(Y 向下增加)。但是,当我将fxml文件导入Java时,坐标全部翻转。以下
我有一个包含相互依赖的数字字段的模型,我正在努力了解如何使用 yup 设置复杂的验证. 为了简单起见,想象一个具有以下形状的对象: { a: number, b: number } 我
我有一个运行大量验证的架构。但是我不想在出现错误时显示一些错误消息,尽管我希望突出显示该字段。提供空字符串而不是错误消息会导致 formik 在验证运行时不显示红色输入字段。这是我当前的代码 cons
我正在使用 formik 来实现我们的表单。当您在上面的行中添加数据时,我们需要追加一行新的字段。提交表单时,我们收到 yup 验证错误,因为新添加的行不符合条件。请提出任何解决方案以跳过对新添加的行
我一直在使用 Yup 和 Formik 在 React 中进行表单验证。如何设置输入语言的验证?我希望用户可以(并且只能)以特定语言书写(更改键盘的默认语言) const validationSche
我想通过将模式放在单独的文件中来组织我的表单代码。我注意到,当我导出一个 yup 模式,然后将其导入另一个模式时,它总是失败。模式数据似乎是正确的(当我控制日志时),但是,导入模式的验证从未运行。 例
我得到了以下代码: name: yup .string() .trim() .required(message("nameMissing"))
我有一个验证,它只通过检查它们是否违反了它的唯一规则来验证它的字段,但它允许数组内的重复。 我想要某种不允许其中有重复值的条件。 我的目标: respostas: Yup.array() .o
我正在尝试使用 yup 进行密码验证,其中至少满足 4 个密码条件中的 3 个。我很难找到现有的方法来做到这一点。 我的要求是这样的: At least 8 characters It must us
我使用 react-hook-form 和 yup 来验证我的表单。 我想知道架构的所有必填字段以在表单中显示一些信息(如必填字段的“*”)。我们可以通过这行代码实现这一点: schema.descr
我正在使用 react-hook-form与 Yup用于在我的应用程序中管理表单的库。 我正在尝试根据我的组件状态创建动态 Yup 模式。 例如: import React, { useContext
我正在使用 Yup 的 .test() 在 Formik 中尝试异步验证方法并需要设置我从 API 获得的错误消息。根据后端的某些条件,错误消息会有所不同。 尝试了这里提到的几个解决方案 https:
我正在尝试在 angular7 项目中添加 yup。我已成功将其添加到我的组件中。 readonly optionalRequiredSchema = yup.object().shape({
我已经定义了一个 yup 模式 export const ValidationSchema = yup.object().shape({ dateTo: yup .date()
我是一名优秀的程序员,十分优秀!