Kami membungkus bidang formulir kami ke dalam komponennya sendiri yang berisi logika validasinya. Contoh
UsernameInput.js
class UsernameInput extends Component {
render() {
return this.props.form.getFieldDecorator(this.props.id, {
rules: [...]
})(InputComponent);
}
}
Dan kami ingin menggunakannya dalam bentuk kami seperti ini
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
<UsernameInput form={this.props.form} />
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
Ini tidak berfungsi karena FormItem.getControls tidak mendeteksi komponen sebagai kontrol. Hanya melihat pembungkusnya sebagai UsernameInput.
FormItem
untuk mendeteksi UsernameInput
dan berfungsi sebagai kontrol masukan apa pun. Tampilkan pesan kesalahan, umpan balik, bantuan, dll.
FormItem
tidak menemukan kontrol di dalamnya.
Sulit untuk menyelesaikan masalah ini. Bisakah Anda memposting saran Anda (bagaimana menerapkan) di sini jika ada?
Kami menyelesaikan ini dengan memanggil komponen sebagai fungsi
CustomForm.js
// imports here
class CustomForm {
render() {
return (<Form>
<Form.Item>
{UsernameInput({ form: this.props.form })}
</Form.Item>
</Form>);
}
}
export default Form.create()(CustomForm);
Tetapi jika Anda terbuka untuk ide, saya pikir solusi yang mungkin adalah mendefinisikan konteks dalam FormItem
dan Input
dapat mendaftarkan diri mereka sendiri ketika ada. Contoh
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);
}
}
}
Saya akan mencoba mencari solusi.
@gaastonsr dapatkah Anda menunjukkan seluruh kode Anda tentang UsernameInput dengan solusi ini?
@gaastonsr Solusi Anda sangat membantu saya!
Apakah ini masalah yang masih valid? Saran konteks terdengar bagus bagi saya.
Baru saja bertemu hari ini di [email protected]. Masih menjadi masalah. Solusi fungsi
Halo @gaastonsr. Kami sangat menyukai proposal / umpan balik Anda, selamat datang untuk mengirimkan Permintaan Tarik untuk itu. Silakan kirim Permintaan Tarik Anda ke cabang yang tepat (cabang fitur untuk fitur baru, master untuk perbaikan bug dan perubahan lainnya), isi [Template Permintaan Tarik ] di sini, sediakan changelog / TypeScript / dokumentasi / test case jika diperlukan dan pastikan CI lolos, kami akan segera memeriksanya, kami hargai sebelumnya dan kami mencari kata kunci untuk kontribusi Anda!
Halo @gaastonsr, kami sepenuhnya setuju dengan saran / umpan balik Anda, silakan di gudang ini untuk membuat Permintaan Tarik untuk menyelesaikan masalah ini. Silakan kirim Permintaan Tarik ke cabang yang benar (fitur baru ke cabang fitur, yang lainnya ke cabang master), pastikan untuk mengisi templat prasetel di Permintaan Tarik, dan berikan log perubahan yang sesuai, definisi TypeScript, kasus uji, dokumen, dll. Yang diperlukan untuk perubahan , Dan pastikan CI lolos, kami akan meninjau secepatnya, terima kasih sebelumnya dan nantikan kontribusi Anda!
Silakan periksa komponen formulir baru di antd v4, formulir v3 tidak akan dipertahankan dalam waktu singkat.
Komentar yang paling membantu
Kami menyelesaikan ini dengan memanggil komponen sebagai fungsi
CustomForm.js
Tetapi jika Anda terbuka untuk ide, saya pikir solusi yang mungkin adalah mendefinisikan konteks dalam
FormItem
danInput
dapat mendaftarkan diri mereka sendiri ketika ada. ContohFormItem.js
Input.js