Как мне подтвердить номер телефона-ui-материала с помощью Yup?

Я использую material-ui-phone-number для поля ввода в форме. Я хочу подтвердить номер телефона с помощью Ага. Независимо от того, что я ввожу в поле, оно говорит, что номер телефона не введен. Я проверяю правильность строки, которая должна быть передана Yup. В документации сказано, что material-ui-phone-number расширяется от Textfield, поэтому он должен работать с Yup.

//Yup

const phoneRegExp = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/

const validationSchema = Yup.object().shape({

    contactFirstName: Yup.string()
        .min(1, "Must have a character")
        .max(255, "Must be shorter than 255")
        .required("Must enter a first name"),

    contactLastName: Yup.string()
        .min(1, "Must have a character")
        .max(255, "Must be shorter than 255")
        .required("Must enter a last name")

    contactPhoneNumber: Yup.string()
        .matches(phoneRegExp, "Phone number is not valid")
        .required("Must enter a phone number")

})

export default validationSchema

//ContactInformation.js

    <div className="contactPhoneNumber">
            <MuiPhoneNumber 
                id="contactPhoneNumber"
                label="Phone Number"
                defaultCountry={"us"}
                variant="filled"
                onChange={handleChange}
                onBlur={handleBlur}
                value={values.contactPhoneNumber}
                className={touched.contactPhoneNumber && errors.contactPhoneNumber ? "has-error" : null}
               />
            <Error touched={touched.contactPhoneNumber} message={errors.contactPhoneNumber}/>
//EventForm.js

export default function EventForm(){

    return (
        <Formik 
        initialValues={{eventName: "", email: "", }}
        validationSchema={validationSchema}
        onSubmit={(values, {setSubmitting, resetForm}) => {
            setTimeout(() => {

                alert(JSON.stringify(values, null, 2));

                setSubmitting(false);

            }, 400);
        }}
        >
            { ({
                values, 
                errors, 
                touched, 
                handleChange, 
                handleBlur,
                handleSubmit,
                isSubmitting
            }) => (
            <form onSubmit={handleSubmit}>

                <EventDetails values={values} touched={touched} errors={errors} handleBlur={handleBlur} handleChange={handleChange} />
                <Divider />
                <ContactInformation values={values} touched={touched} errors={errors} handleBlur={handleBlur} handleChange={handleChange} />

                <div className="submitButton">
                    <Button variant="outlined" type="submit" disabled={isSubmitting} >
                        Submit
                    </Button>
                </div>

            </form>
            )}
        </Formik>
    )

}

введите здесь описание изображения


person QThompson    schedule 12.11.2019    source источник


Ответы (2)


Вам нужно внести изменения в строку handleChange.

Вам нужно передать ключ в handleChange.

<div className="contactPhoneNumber">
        <MuiPhoneNumber 
            id="contactPhoneNumber"
            label="Phone Number"
            defaultCountry={"us"}
            variant="filled"
            onChange={handleChange('contactPhoneNumber')}
            onBlur={handleBlur}
            value={values.contactPhoneNumber}
            className={touched.contactPhoneNumber && errors.contactPhoneNumber ? "has-error" : null}
           />
        <Error touched={touched.contactPhoneNumber} message={errors.contactPhoneNumber}/>
person Muhammad Danial Iqbal    schedule 26.02.2020

Как вы объявили validationSchema = {validationSchema}

Сначала создайте объект для Ага. Внутри него объявите свои проверки.

const validationSchema = Yup.object({
contactPhoneNumber: Yup.string()
        .matches(phoneRegExp, "Phone number is not valid")
        .required("Must enter a phone number")
})
person Zaid Mansuri    schedule 13.11.2019
comment
Нет, это не исправляет, потому что это уже есть в моем коде. - person QThompson; 14.11.2019
comment
Нет, я не получил решения - person QThompson; 18.11.2019