मेरे पास अनुवाद के लिए घटक भाषा है
const Language = (props: IOwnProps) => {
// error is in next line for useSelector
const language = useSelector(
(state: IState) => state.currentLang
);
return getTranslations(
props.languageString
);
};
फॉर्म में मेरे पास फॉर्मिक का उपयोग करके सत्यापन है
const validationSchema = () => {
const requiredFirstName = Language({
languageString: firstNameRequired,
});
return yup.object({
firstName: yup
.string()
.required(requiredFirstName)
});
};
यहाँ प्रपत्र घटक है
const UserForm = ({
userData: userData
setErrorIndex,
}: UserFormProps) => {
const formik = useFormik({
initialValues: {
userData: userData.firstName,
},
validationSchema,
onSubmit: (values) => {
const playerDataLocal = {
firstName: values.firstName,
};
handleSubmit(playerDataLocal);
},
});
return (
<form onSubmit={formik.handleSubmit}>
<TextField
id="firstName"
name="firstName"
label="First Name *"
defaultValue={formik.values.firstName}
onChange={formik.handleChange}
error={formik.touched.firstName && Boolean(formik.errors.firstName)}
helperText={formik.touched.firstName && formik.errors.firstName}
fullWidth
/>
</form>
);
};
export default UserForm;
भाषा के साथ सत्यापन स्कीमा लाइन में एक त्रुटि दें: अमान्य हुक कॉल। हुक को केवल फ़ंक्शन घटक के शरीर के अंदर ही बुलाया जा सकता है।
Language
की कॉल validationSchema
से है जो एक कार्यात्मक घटक है त्रुटि का कॉल स्टैक Language
से useSelector
की पंक्ति में है validationSchema
का कॉल 'useFormik' के अंदर है, क्या यह समस्या हो सकती है? कोई विचार?
1 उत्तर
ऐसा इसलिए है क्योंकि validationSchema
एक प्रतिक्रिया घटक नहीं है। आप केवल एक कार्यात्मक घटक के अंदर हुक का उपयोग कर सकते हैं और चूंकि validationSchema
JSX या किसी अन्य घटक के अलावा कुछ और देता है, इसलिए इसे एक प्रतिक्रिया घटक के रूप में वर्गीकृत नहीं किया जाता है।
आप शायद अपने हुक कॉल को UserForm
के अंदर ले जाना चाहेंगे और फिर परिणाम को validationSchema
में तर्क के रूप में पास करेंगे।
use
के साथ नाम देना होगा, उदा।useLanguage
औरuseValidationSchema
।eslint-plugin-react-hooks
को लगता है कि आप हुक के नियम तोड़ रहे हैं क्योंकिvalidationSchema
बड़े अक्षर याuse
उपसर्ग से शुरू नहीं होता है।useSelector
को मूल घटकUserForm
में कॉल करें और इसे प्रोप के रूप में अग्रेषित करें - और आपकोuse
के साथ नाम बदलने की आवश्यकता नहीं हैLanguage
एक घटक की तरह नहीं दिखता है?