Wir verpacken unsere Formularfelder in eine eigene Komponente, die ihre Validierungslogik enthält. Beispiel
UsernameInput.js
class UsernameInput extends Component {
render() {
return this.props.form.getFieldDecorator(this.props.id, {
rules: [...]
})(InputComponent);
}
}
Und wir wollen sie in unseren Formen so verwenden
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
<UsernameInput form={this.props.form} />
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
Dies funktioniert nicht, da FormItem.getControls die Komponente nicht als
FormItem
, um UsernameInput
und als Eingabesteuerung zu arbeiten. Zeigen Sie Fehlermeldungen, Feedback, Hilfen usw. an.
FormItem
findet das Steuerelement nicht im Inneren.
Es ist schwierig, dieses Problem zu lösen. Könnten Sie hier gegebenenfalls Ihren Rat (wie man ihn umsetzt) veröffentlichen?
Wir haben dies gelöst, indem wir die Komponente als Funktion aufgerufen haben
CustomForm.js
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
{UsernameInput({ form: this.props.form })}
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
Wenn Sie jedoch offen für Ideen sind, besteht eine mögliche Lösung darin, einen Kontext im FormItem
und der Input
kann sich registrieren, wenn er vorhanden ist. Beispiel
FormItem.js
class FormItem extends Component {
static childContextTypes = {
registerControl: PropTypes.func
};
getChildContext() {
return { registerControl: this.registerControl };
}
registerControl(control) {
this.controls.push(control);
}
}
Input.js
class Input extends Component {
static contextTypes = {
registerControl: PropTypes.func
};
componentDidMount() {
if (this.context.registerControl) {
this.registerControl(this);
}
}
}
Ich werde versuchen, eine Lösung zu finden.
@gaastonsr Könnten Sie mit dieser anzeigen ?
@gaastonsr Deine Lösung hilft mir sehr!
Ist dies ein noch gültiges Problem? Der Kontextvorschlag klingt gut für mich.
Bin gerade heute auf gestoßen. Immer noch ein Problem. Die Funktionsumgehung von @gaastonsr ist imo eleganter, als suchen müssen .
Hallo @gaastonsr. Wir freuen uns sehr über Ihren Vorschlag / Ihr Feedback. Bitte senden Sie uns eine Pull-Anfrage . Bitte senden Sie Ihre Pull-Anfrage an den richtigen Zweig (Feature-Zweig für neues Feature, Master für Bugfix und andere Änderungen). Füllen Sie die [Pull-Request-Vorlage ] Geben Sie hier bei Bedarf Änderungsprotokoll / TypeScript / Dokumentation / Testfälle an und stellen Sie sicher, dass CI bestanden wurde. Wir werden es bald überprüfen. Schätzen Sie es im Voraus und suchen Sie nach einem Wort für Ihren Beitrag!
Hallo @gaastonsr, wir stimmen Ihrem Vorschlag / Feedback voll zögern Sie nicht, in diesem Lager eine Pull-Anfrage zu voreingestellte Vorlage in der Pull-Anforderung aus und geben Sie das entsprechende Änderungsprotokoll, TypeScript-Definitionen, Testfälle, Dokumente usw. an, die für die Änderungen erforderlich sind Und um sicherzustellen, dass CI bestanden wird, werden wir dies so schnell wie möglich überprüfen. Vielen Dank im Voraus und freuen uns auf Ihren Beitrag!
Bitte überprüfen Sie die neue Formularkomponente in antd v4. Das Formular v3 wird nicht in kurzer Zeit gepflegt.
Hilfreichster Kommentar
Wir haben dies gelöst, indem wir die Komponente als Funktion aufgerufen haben
CustomForm.js
Wenn Sie jedoch offen für Ideen sind, besteht eine mögliche Lösung darin, einen Kontext im
FormItem
und derInput
kann sich registrieren, wenn er vorhanden ist. BeispielFormItem.js
Input.js