#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>