javascript - Formik - 在 1 秒后或模糊时验证输入
问题描述
我有一个 Formik 表单,我想在输入更改时运行验证器,但仅在更改后 1 秒更新错误。但是,如果输入是模糊的,验证应该立即进行。我怎样才能做到这一点?目前,我计划手动将 onBlur 事件传递给类似于此的每个输入:(name, e) => setLastEditedInput(name)
并使用正确的名称为每个输入绑定它。目前,我的代码如下所示:
import {Formik, Form as FormikForm} from "formik";
import {useEffect, useState, useRef} from "react";
function Form({initialValues, validators, ...rest}) {
const [lastEditedInput, setLastEditedInput] = useState(undefined);
const prevLastEditedInputRef = useRef();
useEffect(() => {
prevLastEditedInputRef.current = lastEditedInput;
});
const prevLastEditedInput = prevLastEditedInputRef.current;
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms));
return (
<Formik
initialValues={initialValues}
validate={values => {
function getErrors() {
const errors = {};
Object.entries(validatorsWithDefaultValidatorsAdded)
.forEach(([validatorKey, validator]) => {
const value = values[validatorKey];
errors[validatorKey] = validator(value);
});
return errors;
}
if (lastEditedInput === prevLastEditedInput) {
return sleep(1000).then(getErrors);
}
return getErrors();
}}
{...rest}
>
<FormikForm>
</FormikForm>
</Formik>
);
}
该代码尚未经过测试,可能无法正常工作,但这就是想法。Formik 有没有更好的方法?
解决方案
推荐阅读
- android - Ionic 应用程序在网络上工作,但不能在模拟器或设备上工作
- c# - C# Intellisense 自动完成功能刚刚停止工作
- c# - Xamarin.Andriod:如何接收消息并显示通知
- matlab - 在 Matlab 中实现 i(t) 函数
- odata - ASP.NetCore OData DTO $expand 导航属性导致空数组
- html - 悬停在链接中时如何显示图像?
- c# - 在某些情况下,空班是正确的选择吗?
- php - 在VSCode中选择引号之间的所有内容的键盘快捷键是什么
- mysql - 如何检查电子邮件是否已存在于数据库中
- google-apps-script - 使用 Google 表单从用户那里收集收据数据并保存在 Google 表格中