Formik:按字段验证

Formik : Validation by field

Formik 调用验证时对所有字段进行验证。 某些字段的更改会导致对表单中所有其他字段的验证执行。当我通过将验证道具传递给组件来使用独立字段验证时,就会发生这种情况。

我通过将验证道具传递给如下组件来使用字段验证:

<Field 
    type="text" 
    name={field.name}  
    placeholder={field.caption}
    options={field.options || undefined}
    label={field.caption}
    component={stringToComponentMapper[field.component]}
    type={field.component}
    validate={this.isRequired}
/>
       isRequired = value => {
        console.log(value);
       }
         <Form>
                <FieldArray
                    name='fields'
                    render = { arrayHelpers => (
                      <div>
                        {formFields.fields && formFields.fields.length > 0 &&
                         formFields.fields.map((field, index) => (
                            <div key={field.name}>
                              <Field 
                                type="text" 
                                name={field.name}  
                                placeholder={field.caption}
                                options={field.options || undefined}
                                label={field.caption}
                                component={stringToComponentMapper[field.component]}
                                type={field.component}
                                validate={this.isRequired}
                              /> 
                              <ErrorMessage name={field.name}/>
                            </div>
                         ))
                        }
                        <button type='submit' className='btn'>Submit</button>
                      </div>
                    )}
                />
              </Form>

例如:在电子邮件字段中键入时,将调用所有字段的验证。

Formik 中的每个字段验证并不意味着在必要时验证字段。这意味着每个字段都可以获得适合用户需求的自定义验证(例如自定义电子邮件验证等)。因此,要检查字段内的要求,您的 isRequired 函数必须更改如下:

const isRequired = (value) => {
    return !value ? "Required" : "";
} 

Formik 不会在更改时单独验证每个字段,而是在发生更改时对每个字段运行验证。 此行为是库的创建者在回答此问题时的意图