Conditional validation with Yup and Formik

前端 未结 2 776
孤城傲影
孤城傲影 2021-01-02 12:50

Here is my validation schema:

const validationSchema = Yup.object().shape({
      person: Yup.object().shape({
        name: Yup.string().required(\'Field is         


        
相关标签:
2条回答
  • 2021-01-02 13:42

    Updated ans: 2020.

    you can use Yup conditions

    const validationSchema = Yup.object().shape({
    
          isCompany: Yup.boolean(),
          companyName: Yup.string().when('isCompany', {
            is: true,
            then: Yup.string().required('Field is required')
          }),
          companyAddress: Yup.string().when('isCompany', {
            is: (isCompany) => true,//just an e.g. you can return a function
            then: Yup.string().required('Field is required'),
            otherwise: Yup.string()
          }),
        });
    
    
    

    And make sure to update your form accordingly. I hope you get the point...

    0 讨论(0)
  • 2021-01-02 13:43

    You can conditionally add to your validation schema just like any other object:

    let validationShape = {
      company: Yup.object().shape({
        name: Yup.string().required('Field is required'),
        address: Yup.string().required('Field is required'),
        email: Yup.string()
          .email('Wrong e-mail format')
          .required('Field is required')
      })
    };
    
    if (this.state.isPerson) {
      validationShape.person = Yup.object().shape({
        name: Yup.string().required('Field is required'),
        surname: Yup.string().required('Field is required'),
        middleName: Yup.string().required('Field is required'),
        email: Yup.string()
          .email('Wrong e-mail format')
          .required('Field is required');
    }
    
    const validationSchema = Yup.object().shape(validationShape);
    
    0 讨论(0)
提交回复
热议问题