Я встроил компонент React внутрь другого, где я применил проверку к родителю:
const EmailAddressInput = (props) => {
const { emailList, onKeyUp } = props;
return (
<div>
<textarea
{...emailList}
/>
</div>
);
};
Он помещается внутри другого компонента, например:
let Emailer = (props) => {
const { fields: { passType, invitees },
return (
<legend>Select pass type:</legend>
{ renderPassTypes(eventsState.selectedEvent.AssociatedPassTypes) }
{passType.touched && passType.error && <span className="error">{passType.error}</span>}
<EmailAddressInput { ...invitees } onKeyUp={ () => handleEmailToBarKeyUp(invitees.emailList.value) } />
{invitees.touched && invitees.error && <span className="error">{invitees.error}</span> }
)
}
Теперь, учитывая, что я хочу убедиться, что EmailAddressInput
в emailList
не пусто, я добавил пользовательское правило проверки:
const emailValidator = createValidator({
invitees: [requiredProperty('emailList')],
passType: required,
});
Моя утилита проверки выглядит так:
export function required(value) {
if (isEmpty(value)) {
return 'Required';
}
}
export function requiredProperty(fieldName) {
return function (value) {
return required(value[fieldName]);
};
}
export function createValidator(rules) {
return (data = {}) => {
const errors = {};
Object.keys(rules).forEach((key) => {
const rule = join([].concat(rules[key])); // concat enables both functions and arrays of functions
const error = rule(data[key], data);
if (error) {
errors[key] = error;
}
});
return errors;
};
}
Теперь, когда я отправляю форму с пустой текстовой областью EmailAddressInput
, createValidator
возвращает {invitees: 'Required'}
. Отправка формы останавливается, как и ожидалось (ура!), но сообщение об ошибке теряется.
Ошибки добавляются как свойство errors
объекта Redux-Form field
, но invitees
не является объектом field
, поэтому я предполагаю, что по этой причине коллекция ошибок не прикрепляется.
field
на самом деле является текстовой областью emailList
в EmailAddressInput
, но к ней не подключается коллекция ошибок, поскольку соответствующий ключ в коллекции ошибок отличается (invitees
против emailList
)
Любая идея, как я могу отобразить эту ошибку?