Anda dapat melakukan ini tanpa menggunakan referensi . Pendekatan ini lebih disukai, karena referensi dapat menyebabkan kode rapuh . The Bereaksi docs menyarankan menemukan solusi lain jika mungkin:
Jika Anda belum memprogram beberapa aplikasi dengan Bereaksi, kecenderungan pertama Anda biasanya adalah mencoba menggunakan referensi untuk "mewujudkan sesuatu" di aplikasi Anda. Jika ini masalahnya, luangkan waktu sejenak dan pikirkan lebih kritis tentang di mana negara harus dimiliki dalam hierarki komponen. Seringkali, menjadi jelas bahwa tempat yang tepat untuk "memiliki" keadaan itu berada pada tingkat yang lebih tinggi dalam hierarki. Menempatkan keadaan di sana sering menghilangkan keinginan untuk menggunakan referensi untuk "mewujudkan sesuatu" - sebagai gantinya, aliran data biasanya akan mencapai tujuan Anda.
Sebagai gantinya, kami akan menggunakan variabel status untuk memfokuskan bidang input kedua.
Tambahkan variabel status yang akan kami sampaikan sebagai penyangga ke DescriptionInput
:
initialState() {
return {
focusDescriptionInput: false,
};
}
Tetapkan metode handler yang akan mengatur variabel status ini menjadi true:
handleTitleInputSubmit() {
this.setState(focusDescriptionInput: true);
}
Setelah memasukkan / menekan enter / selanjutnya pada TitleInput
, kami akan menelepon handleTitleInputSubmit
. Ini akan focusDescriptionInput
menjadi true.
<TextInput
style = {styles.titleInput}
returnKeyType = {"next"}
autoFocus = {true}
placeholder = "Title"
onSubmitEditing={this.handleTitleInputSubmit}
/>
DescriptionInput
's focus
prop diatur untuk kami focusDescriptionInput
variabel negara. Jadi, ketika focusDescriptionInput
perubahan (dalam langkah 3), DescriptionInput
akan dirender ulang focus={true}
.
<TextInput
style = {styles.descriptionInput}
multiline = {true}
maxLength = {200}
placeholder = "Description"
focus={this.state.focusDescriptionInput}
/>
Ini adalah cara yang bagus untuk menghindari penggunaan referensi, karena referensi dapat menyebabkan kode yang lebih rapuh :)
EDIT: h / t ke @LaneRettig untuk menunjukkan bahwa Anda harus membungkus React Native TextInput dengan beberapa alat peraga tambahan & metode untuk membuatnya merespons focus
:
// Props:
static propTypes = {
focus: PropTypes.bool,
}
static defaultProps = {
focus: false,
}
// Methods:
focus() {
this._component.focus();
}
componentWillReceiveProps(nextProps) {
const {focus} = nextProps;
focus && this.focus();
}