フォームフィールドを、検証ロジックを含む独自のコンポーネントにラップします。 例
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);
}
}
Input.js
class Input extends Component {
static contextTypes = {
registerControl: PropTypes.func
};
componentDidMount() {
if (this.context.registerControl) {
this.registerControl(this);
}
}
}
私は解決策を見つけようとします。
@gaastonsrは、この回避策を使用してUsernameInputに関するコード全体を表示できますか?
@gaastonsrあなたの解決策は私を大いに助けてくれます!
これはまだ有効な問題ですか? コンテキストの提案は私には良いと思います。
今日[email protected]でこれに@gaastonsrの関数の回避策は、すべてのフォームコンポーネントにコンテキストのチェックを要求するよりもエレガントです。
こんにちは@gaastonsr。私たちはあなたの提案/フィードバックがとても気に入っています。プルリクエストを
こんにちは@gaastonsr、私たちはあなたの提案/フィードバックに完全に同意します、この問題を解決するためにプルリクエストを事前設定されたテンプレートを入力し、変更に必要な対応する変更ログ、TypeScript定義、テストケース、ドキュメントなどを提供してください。 、そしてCIが合格することを確実にするために、私たちはできるだけ早くレビューします、事前に感謝し、あなたの貢献を楽しみにしています!
antd v4の新しいフォームコンポーネントを確認してください。v3フォームは短時間で維持されません。
最も参考になるコメント
コンポーネントを関数として呼び出すことでこれを解決しました
CustomForm.js
しかし、もしあなたがアイデアにオープンであるなら、可能な解決策は
FormItem
コンテキストを定義することであり、Input
はそれが存在するときに自分自身を登録できると思います。 例FormItem.js
Input.js