Почему не работает валидатор для 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 шт):
Я не очень хорошо понимают механизмы JS, но да, почему-то без предварительной проверки на то, что текст существует, вызов match() у текста выбрасывает ошибку. Решается это довольно простым способом:
export const nonMatchPipe = answer => answer && answer.match('\\|')
? 'Ответ не должен содержать символ |'
: undefined;
Это немного похоже на проверку Objects.requireNonNull() в Java, только в Java это необязательная к исполнению рекомендация, а в JS из-за этого возникает ошибка.