Как правильно использовать Formik ErrorMessage с formik, используя render props и библиотеку дизайна для входных данных?

#javascript #reactjs #formik

#javascript #reactjs #formik

Вопрос:

Я хочу вызывать ошибки formik и касаться всякий раз, когда нажимается ввод, и значение неверно. Я передаю реквизиты formik компоненту ввода следующим образом :

 const initialValues = {
    title: ''
};

const validationSchema = yup.object({
    title: yup.string().max(50, 'less than 50 words !!').required('required !!')
});

function Add() {
        <Formik initialValues={initialValues} onSubmit={onSubmit} validationSchema={validationSchema}>
            {(props) => {
                return (
                    <Form>
                                    <AddTitle props={props} />
                    </Form>
                );
            }}
        </Formik>
    );
}

  

Здесь я пытаюсь отображать сообщение об ошибке всякий раз, когда к входу прикасаются, и с ним возникает ошибка, подобная этой :

 import { Input } from 'antd';

function AddTitle(props) {
    console.log(props.props);
    return (
            <Field name="title">
                {() => {
                    return (
                        <Input
                            onChange={(e) => {
                                props.props.setFieldValue('title', e.target.value)
                            }}
                        />
                    );
                }}
            </Field>
            <ErrorMessage name="title" />
            <P>
                {props.props.touched.title amp;amp; props.props.errors.title amp;amp; props.props.errors.title}
            </P>
        </React.Fragment>
    );
}
  

Но ErrorMessage и абзац ниже не работают, когда к входным данным прикасаются и они пусты .

В журнале консоли показано, что ввод не обрабатывает метод, связанный с formik, и только вызывает ошибку для него :

 touched:
__proto__: Object
errors:
title: "less than 50 words !"
__proto__: Object
  

Как я могу правильно использовать ErrorMessage при передаче реквизита formik компоненту и использовании третьей библиотеки для ввода?

Ответ №1:

Исправлена проблема путем добавления onBlur к входным данным, и ErrorMessage работает нормально :

 <Field name="title">
                {() => {
                    return (
                        <Input
                            onBlur={() => props.props.setFieldTouched('title')}
                            onChange={(e) => {
                                props.props.setFieldValue('title', e.target.value);
                            }}
                        />
                    );
                }}
            </Field>
            <P class="mt-2 text-danger">
                <ErrorMessage name="title" />
            </P>