نحن نلف حقول النموذج الخاصة بنا في مكون خاص بها يحتوي على منطق التحقق الخاص بهم. مثال
UsernameInput.js
class UsernameInput extends Component {
render() {
return this.props.form.getFieldDecorator(this.props.id, {
rules: [...]
})(InputComponent);
}
}
ونريد أن نستخدمها في أشكالنا مثل هذه
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
<UsernameInput form={this.props.form} />
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
هذا لا يعمل لأن FormItem.getControls لا يكتشف المكون كعنصر تحكم. فقط يرى الغلاف على أنه UsernameInput.
FormItem
لاكتشاف UsernameInput
والعمل كأي عنصر تحكم في الإدخال. إظهار رسائل الخطأ والتعليقات والمساعدات وما إلى ذلك.
FormItem
لا يجد عنصر التحكم بالداخل.
من الصعب حل هذه المشكلة. هل يمكنك نشر نصيحتك (كيفية التنفيذ) هنا إن وجدت؟
لقد حللنا هذا عن طريق استدعاء المكون كدالة
CustomForm.js
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
{UsernameInput({ form: this.props.form })}
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
ولكن إذا كنت منفتحًا على الأفكار ، أعتقد أن الحل المحتمل هو تحديد سياق في FormItem
ويمكن لـ Input
تسجيل أنفسهم عندما يكون موجودًا. مثال
FormItem.js
class FormItem extends Component {
static childContextTypes = {
registerControl: PropTypes.func
};
getChildContext() {
return { registerControl: this.registerControl };
}
registerControl(control) {
this.controls.push(control);
}
}
إدخال. js
class Input extends Component {
static contextTypes = {
registerControl: PropTypes.func
};
componentDidMount() {
if (this.context.registerControl) {
this.registerControl(this);
}
}
}
سأحاول إيجاد حل.
gaastonsr هل يمكن أن تظهر الكود الخاص بك بالكامل حول UsernameInput مع هذا الحل البديل؟
gaastonsr حلك ساعدني كثيرًا!
هل هذه مشكلة لا تزال صالحة؟ يبدو اقتراح السياق جيدًا بالنسبة لي.
واجهت هذا اليوم على [email protected]. لا تزال مشكلة. الحل البديل لوظيفة gaastonsr هو imo أكثر أناقة من طلب جميع مكونات النموذج للتحقق من السياق.
مرحبًاgaastonsr. نحن نحب اقتراحك / ملاحظاتك تمامًا ، ومرحبًا بك لإرسال طلب السحب إلينا . يرجى إرسال طلب السحب إلى الفرع المناسب (فرع الميزات للميزة الجديدة ، والماجستير لإصلاح الأخطاء والتغييرات الأخرى) ، املأ [نموذج طلب السحب ] هنا ، قم بتوفير حالات سجل التغيير / TypeScript / التوثيق / الاختبار إذا لزم الأمر وتأكد من اجتياز CI ، سنراجعها قريبًا. نقدرها مقدمًا ونحن نبحث عن كلمات لمساهمتك!
مرحبًا gaastonsr ، نحن نتفق تمامًا مع اقتراحك / ملاحظاتك ، لا تتردد في هذا المستودع لإنشاء طلب سحب لحل هذه المشكلة. يرجى إرسال طلب السحب إلى الفرع الصحيح (ميزات جديدة لفرع الميزة ، وميزات أخرى إلى الفرع الرئيسي) ، وتأكد من ملء القالب المُعد
يرجى التحقق من مكون النموذج الجديد في antd v4 ، لن يتم الاحتفاظ بالشكل v3 في وقت قصير.
التعليق الأكثر فائدة
لقد حللنا هذا عن طريق استدعاء المكون كدالة
CustomForm.js
ولكن إذا كنت منفتحًا على الأفكار ، أعتقد أن الحل المحتمل هو تحديد سياق في
FormItem
ويمكن لـInput
تسجيل أنفسهم عندما يكون موجودًا. مثالFormItem.js
إدخال. js