使用Formik Yup验证动态创建的字段

时间:2020-04-09 05:50:33

标签: formik yup

我需要使用formik或yup验证动态创建的字段。我已经在jquery Validatioh here

中看到了此验证

like this与此to this

我的代码在这里 https://codesandbox.io/s/hidden-haze-47k73?file=/src/demo.js

如何使用formik和yup实现此目的

1 个答案:

答案 0 :(得分:1)

如果您使用formik FieldArray。您可以使用yup来检查其字段:

firends: Yup.array().of(
    Yup.object().shape({
       name: Yup.string().required('Name is required'),
       email: Yup.string()
                .email("Invalid email")
                .required('Email is required'),
    })
),

您的FieldArray将是:

<FieldArray                                                          
 name="firends"
 render={(arrayHelpers) => {
  {values.firends && values.firends.length > 0 ? (
     values.firends.map((friend, index) => (
    <div key={index}>
      <Field
         className="form-control"
         name={`friends.${index}.name`}
         placeholder="name"
         type="text"
      />
        {errors &&
         errors.friends &&
         errors.friends[index] &&
         errors.friends[index].name &&
           (touched &&
            touched.friends &&
            touched.friends[index] &&
            touched.friends[index].name) && (
              <div className="field-error">
                {errors.friends[index].name}
              </div>
      )}
     <Field
         className="form-control"
         name={`friends.${index}.email`}
         placeholder="email"
         type="text"
      />
        {errors &&
         errors.friends &&
         errors.friends[index] &&
         errors.friends[index].email &&
           (touched &&
            touched.friends &&
            touched.friends[index] &&
            touched.friends[index].email) && (
              <div className="field-error">
                {errors.friends[index].email}
              </div>
      )}
  </div>
  ))
 }}

您可以找到完全可用的代码here