マイredux-form飾らフォームコンポーネントは条件付きで私のReduxの状態に応じて、email
フィールドを持っている(ユーザーがゲストであるかどうかによって異なります。)それが存在しているときに私は条件付きでのみ(そのフィールドを同期-検証するredux-form:1つの同期バリデータを動的に除外するにはどうすればよいですか?
レンダリングされました。)現在、フォームのバリデータにはemail
フィールドバリデータが含まれており、フィールドはフォームから除外された場合でも実行されます。render
の間にこのバリデータが実行されます。
私はReduxの形式のデコレータの引数としてバリデータを渡す際に、状態が知られていない、フォームのバリデータを「インスタンス化」と。だから私は現在、これらの場所のいずれかにemail
フィールドバリデーターを含めるかどうかを決定することができません。
状態に基づいて「実行時」/「検証時間」に、単一フィールドのredux形式のバリデータを動的に含める/除外する最適な方法は何ですか?
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;
};
}
私の同期(私は5.3.1を使用しています)からリンクされているこの実装の後でモデル化されています。https://github.com/erikras/react-redux-universal-hot-example/blob/master/src/utils/validation.js
redux-form GitHubで問題を公開しました:https://github.com/erikras/redux-form/issues/1514 –