Почему не работает валидатор для redux-form?

При помощи redux-form делаю форму. Соответственно, примерно так выглядит форма:

<form onSubmit={handleSubmit}>
    <Field name={name} component={component} validate={validators}/>
</form>

Ещё в отдельном файле у меня есть валидаторы:

export const required = value => value ? undefined : 'Это полe обязательное';
export const nonMatchPipe = answer => answer.match('\\|') ? 'Ответ не должен содержать символ |' : undefined;

А теперь возникает интересный феномен. Вот такой набор валидаторов работает нормально:

<Field name={name} component={component} validate={[required, nonMatchPipe]}/>

И если оставить валидатор required, то всё тоже нормально:

<Field name={name} component={component} validate={[required]}/>

Но если я оставляю только валидатор nonMatchPipe, то возникает ошибка

TypeError: Cannot read property 'match' of undefined`.

Почему возникает ошибка? Как её решить?


Ответы (1 шт):

Автор решения: Zhenyria

Я не очень хорошо понимают механизмы JS, но да, почему-то без предварительной проверки на то, что текст существует, вызов match() у текста выбрасывает ошибку. Решается это довольно простым способом:

export const nonMatchPipe = answer => answer && answer.match('\\|')
    ? 'Ответ не должен содержать символ |'
    : undefined;

Это немного похоже на проверку Objects.requireNonNull() в Java, только в Java это необязательная к исполнению рекомендация, а в JS из-за этого возникает ошибка.

→ Ссылка