Reactjs 在TypeScript中的Formik验证中分配错误消息无效
目前,我正在尝试构建一个用户输入表单,其中用户应该使用React&TypeScript中的Formik输入姓名、电子邮件和密码 处理输入本身工作正常,现在我想向输入表单添加验证功能,因此我编写了如下代码Reactjs 在TypeScript中的Formik验证中分配错误消息无效,reactjs,typescript,validation,formik,Reactjs,Typescript,Validation,Formik,目前,我正在尝试构建一个用户输入表单,其中用户应该使用React&TypeScript中的Formik输入姓名、电子邮件和密码 处理输入本身工作正常,现在我想向输入表单添加验证功能,因此我编写了如下代码 import { Formik, Form, Field, ErrorMessage } from 'formik'; validate(values: User){ let errors: User; errors = values if(!values.pass
import { Formik, Form, Field, ErrorMessage } from 'formik';
validate(values: User){
let errors: User;
errors = values
if(!values.password){
errors.password = 'Enter a password'
} else if(values.password.length < 8){
errors.password = 'Enter at least 8 characters for your password'
}
console.log("The length of errors.password: " + values.password.length);
return errors;
}
return(
<div>
<Formik
initialValues={{ name, email, password }}
onSubmit={this.onSubmit}
validate={this.validate}
enableReinitialize={true}
>
{
(props) => (
<Form>
<fieldset>
<label>Name</label>
<Field type="text" name="name"/>
</fieldset>
<fieldset>
<label>Email</label>
<Field type="text" name="email"/>
</fieldset>
<ErrorMessage name="password" component="div"/>
<fieldset>
<label>Password</label>
<Field type="password" name="password"/>
</fieldset>
<button type="submit">Save</button>
</Form>
)
}
</Formik>
</div>
)
调用并显示密码的长度,但当长度小于8时,会显示一条警告,而不是将字符串“为密码输入至少8个字符”指定给errors.password
Warning: An unhandled error was caught during low priority validation in <Formik validate /> TypeError: Cannot set property 'password' of undefined
我查看了几篇GitHub页面和堆栈溢出文章,但没有找到一篇与我的问题相关的文章
我做错了什么
同样的代码在JavaScript中运行得很好,因为我当前的版本是TypeScript,可能我缺少了什么?看起来在Formik的内部验证循环中,undefined作为参数传递给了验证。我建议更改此行:
let errors: User;
errors = values; // why are you assigning your error object to the values?
为此:
let errors: Partial<User> = {};
看起来在Formik的内部验证循环中,undefined作为参数传递,以在某个点进行验证。我建议更改此行:
let errors: User;
errors = values; // why are you assigning your error object to the values?
为此:
let errors: Partial<User> = {};
谢谢你非常详细和具体的解释!多亏了你的建议,bug消失了:在我发布这个问题之前,我也尝试过让错误:User;,但这不起作用,我怀疑这是否与初始化错误有关。所以我试图通过赋值来初始化它,因为我不知道如何在TypeScript中赋值一个空对象。您建议的代码行允许错误:Partial正是我想要的!我希望我能对你的帖子投5次赞成票。谢谢你非常详细和具体的解释!多亏了你的建议,bug消失了:在我发布这个问题之前,我也尝试过让错误:User;,但这不起作用,我怀疑这是否与初始化错误有关。所以我试图通过赋值来初始化它,因为我不知道如何在TypeScript中赋值一个空对象。您建议的代码行允许错误:Partial正是我想要的!我希望我能投你5次票。