親に検証を適用した別のコンポーネントの内部に 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-Formfield
オブジェクトのプロパティとして追加されますがinvitees
、オブジェクトではないfield
ため、エラーのコレクションが添付されていないと思います。
はfield
実際には のemailList
テキストエリアですが、エラー コレクション内の関連するキーが異なるため ( vs ) EmailAddressInput
、エラー コレクションが添付されていません。invitees
emailList
そのエラーを表示する方法はありますか?