मेरे पास निम्नलिखित संरचना में एक परिवर्तन पासवर्ड फॉर्म है:

<Field name={FORM_FIELDS.OLD_PASSWORD} component={FInputField} type="password" 
validate={[Validation.required]} />
<Field name={FORM_FIELDS.NEW_PASSWORD} component={FInputField} type="password" 
validate={[Validation.required]} />
<Field name={FORM_FIELDS.CONFIRM_PASSWORD} component={FInputField} 
type="password" validate={[ Validation.shouldMatch(password)]} />

और चाहिए मैच समारोह

export const shouldMatch = (matchValue) => {
return (value) => {
    return value !== matchValue ? t('common/validationNotMatch') : undefined
}
};

जब मैं CONFIRM_PASSWORD फ़ील्ड में एक बेमेल इनपुट करता हूं, तो मुझे निम्नलिखित क्रियाएं मिलीं जो सही हैं:

{ type: '@@redux-form/UPDATE_SYNC_ERRORS', meta: { form: 'changePassword' }, 
 payload: { syncErrors: { confirmPassword: 'common/validationNotMatch' } } }

लेकिन इस क्रिया के बाद, एक UNREGISTER_FIELD क्रिया होती है, जो फ़ॉर्म को सिंक त्रुटि ऑब्जेक्ट को साफ़ करने के लिए बनाती है

{ type: '@@redux-form/UNREGISTER_FIELD', meta: { form: 'changePassword' }, 
 payload: { name: 'confirmPassword', destroyOnUnmount: true } }

तो फ़ील्ड फिर से पंजीकृत है

{ type: '@@redux-form/REGISTER_FIELD', meta: { form: 'changePassword' }, 
 payload: { name: 'confirmPassword', type: 'Field' } }

कोई मदद, यहां UNREGISTER_FIELD कार्रवाई क्यों होती है? और जब कोई मेल नहीं होता है तो मैं सत्यापन संदेश हमेशा कैसे प्रकट कर सकता हूं।

1
M1M6 14 सितंबर 2017, 23:44

1 उत्तर

सबसे बढ़िया उत्तर

पढ़ना -" rel="nofollow noreferrer">दस्तावेज़ Field प्रोप validate के लिए वे उल्लेख करते हैं कि

नोट: यदि मान्य प्रोप बदलता है तो फ़ील्ड को फिर से पंजीकृत किया जाएगा।

मैं सोच रहा हूं कि यह अंतर्निहित मुद्दा हो सकता है। आपके द्वारा पोस्ट किए गए कोड से यह स्पष्ट नहीं है कि लाइन Validation.shouldMatch(password) में password वेरिएबल कहां से आता है। लेकिन फ़ंक्शन को समझने के लिए मुझे लगता है कि हर बार password में परिवर्तन होने पर लाइन एक नया फ़ंक्शन उत्पन्न करेगी। (यानी मान्य प्रोप बदल जाएगा)।

लेकिन, दस्तावेज़ों से भी, मैंने पढ़ा है कि validate प्रोप के लिए हस्ताक्षर। है

(मान, सभी मूल्य, सहारा, नाम) => त्रुटि [वैकल्पिक]

तो ऐसा लगता है कि आपको इसके बजाय allValues से password मान प्राप्त करने में सक्षम होना चाहिए, और फिर आप शायद validate प्रोप को बदलने से बच सकते हैं। कुछ इस तरह:

export const shouldMatch =  (repeatedPassword, allValues) => {
  const newPassword = allValues[FORM_FIELDS.NEW_PASSWORD];
  return repeatedPassword !== newPassword ? 
     t('common/validationNotMatch') : 
     undefined
};

और इसे इस तरह इस्तेमाल करें

<Field 
 name={FORM_FIELDS.CONFIRM_PASSWORD} 
 component={FInputField} 
 type="password" 
 validate={[ Validation.shouldMatch ]} 
/> 
1
jonahe 15 सितंबर 2017, 00:51