Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在TypeScript中的Formik验证中分配错误消息无效_Reactjs_Typescript_Validation_Formik - Fatal编程技术网

Reactjs 在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

目前,我正在尝试构建一个用户输入表单,其中用户应该使用React&TypeScript中的Formik输入姓名、电子邮件和密码

处理输入本身工作正常,现在我想向输入表单添加验证功能,因此我编写了如下代码

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>&nbsp;
                    <Field type="text" name="name"/>
                  </fieldset>                                   
                  <fieldset>
                    <label>Email</label>&nbsp;
                    <Field type="text" name="email"/>
                  </fieldset>
                  <ErrorMessage name="password" component="div"/>
                  <fieldset>
                    <label>Password</label>&nbsp;
                    <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次票。