Не удалось найти прямой ответ на проблему, с которой я столкнулся, поэтому надеюсь, что кто-то из SO сможет мне помочь ...
У меня есть простая форма Redux, которая имеет только поля ввода First Name
и Last Name
. Вместо того, чтобы записываться явно, эти поля визуализируются программно, например так:
...
renderNameInput(field) {
const { content } = this.props;
return (
<Field
id={field}
name={field}
component={FormField}
validate={this.nameValidations}
error={!this.isNameValid(field) ? content.nameError : null}
/>
);
}
...
render() {
<form onSubmit={handleSubmit}>
<div>
{this.renderNameInput('firstName')}
{this.renderNameInput('lastName')}
</div>
</form>
}
У меня проблема с ошибкой, когда поле не проверяется. Каждое поле требует минимум 2 символа и максимум 16 (, хотя это не относится к моему конкретному вопросу ).
Что я пытаюсь сделать, так это то, что когда один из входов недействителен, под этим входом отображается ошибка. Если оба входа недействительны, то ошибка будет отображаться под обоими входами ( структура и стиль для отображения ошибок в их соответствующих местоположениях, конечно, выполнены, просто не является частью этого вопроса )
Вот метод, который я проверяю на наличие ошибок:
...
isNameValid(field) {
const { formState = {} } = this.props;
const { syncErrors } = formState;
if (syncErrors && syncErrors[field]) {
return false;
}
}
...
Компонент подключен к хранилищу Redux, поэтому у меня есть доступ к объектам formState
и initial
и values
в форме, а также к моменту, когда они были visit
ed, touch
ред и т. д.
Если - когда пользователь изменяет входное значение - объект syncErrors
должен был выглядеть следующим образом при просмотре состояния Redux в хранилище ( произвольно ):
syncErrors: {
firstName: 'Must be at least 2 characters'
}
Тогда я бы хотел, чтобы сообщение об ошибке отображалось на входе firstName
, а на входе lastName
- ничего. Аналогично, если lastName
будет частью объекта syncErrors
, то ошибка будет отображаться и под этим вводом. Если оба параметра firstName
и lastName
находятся в syncErrors
, ошибка будет отображаться под обоими входами.
Надеюсь, это имело смысл, и кто-то может указать мне правильное направление. Если требуется какое-либо разъяснение, пожалуйста, дайте мне знать.
Спасибо!