Мой redux-form оформленный вид компонента условно имеет email
поле, в зависимости от моего Redux состояния (в зависимости от того или нет пользователь является гостем.)redux-form: Как я могу динамически исключить один валидатор синхронизации?
Я только хочу, чтобы синхронизировать, проверить это поле, когда он присутствует (условно rendered.) В настоящее время валидатор формы включает в себя валидатор поля email
, и этот валидатор работает, даже если поле было исключено из формы, в течение render
.
Когда я «экземпляр» валидатор формы, а и, когда я прохожу валидатор в качестве аргумента перевождь-формы декоратора, состояние не известно. Поэтому в настоящее время я не могу решить, следует ли включать в систему значение email
в любом из этих мест.
Каков наилучший способ динамического включения/исключения проверки валидатора для одного поля в режиме «время выполнения»/«время проверки» на основе состояния?
MyForm.js
import validate from './MyFormValidator';
// [form class whose render optionally shows the email component]
export default reduxForm(
{
form: 'myForm',
fields,
validate
}
)(MyForm)
MyFormValidator.js
import {createValidator, required, email} from '../../utils/validation';
export default createValidator({
email: [email],
country: [required],
// ...
});
Utils/validation.js
export function email(value) {
const emailRegex = /.../i;
if (!emailRegex.exec(value)) {
return 'Please provide a valid email address.';
}
}
export function required(value, message) {
if (isEmpty(value)) {
return message || 'Required.';
}
}
export function createValidator(rules) {
return (data = {}) => {
const errors = {};
Object.keys(rules).forEach((key) => {
const rule = join([].concat(rules[key]));
const error = rule(data[key], data);
if (error) {
errors[key] = error;
}
});
return errors;
};
}
Моя синхронизация валидация моделируется после этой реализации, связанная с документами версии 4.2.0 с сокращенной формой (я использую 5.3.1): https://github.com/erikras/react-redux-universal-hot-example/blob/master/src/utils/validation.js
Открыт вопрос об этом на редукционной форме GitHub: https://github.com/erikras/redux-form/issues/1514 –