Tepat sebelum saya masuk ke detail tentang bagaimana Anda dapat mengakses status komponen anak, pastikan untuk membaca jawaban Markus-ipse mengenai solusi yang lebih baik untuk menangani skenario khusus ini.
Jika Anda memang ingin mengakses status anak-anak komponen, Anda dapat menetapkan properti yang dipanggil refuntuk setiap anak. Sekarang ada dua cara untuk mengimplementasikan referensi: Menggunakan React.createRef()dan ref callback.
Menggunakan React.createRef()
Saat ini cara yang direkomendasikan untuk menggunakan referensi pada Bereaksi 16.3 (Lihat dokumen untuk info lebih lanjut). Jika Anda menggunakan versi sebelumnya, lihat di bawah tentang referensi panggilan balik.
Anda harus membuat referensi baru di konstruktor komponen induk Anda dan kemudian memberikannya kepada anak melalui ref atribut.
class FormEditor extends React.Component {
constructor(props) {
super(props);
this.FieldEditor1 = React.createRef();
}
render() {
return <FieldEditor ref={this.FieldEditor1} />;
}
}
Untuk mengakses referensi semacam ini, Anda harus menggunakan:
const currentFieldEditor1 = this.FieldEditor1.current;
Ini akan mengembalikan instance komponen yang dipasang sehingga Anda dapat menggunakannya currentFieldEditor1.stateuntuk mengakses keadaan.
Hanya catatan singkat untuk mengatakan bahwa jika Anda menggunakan referensi ini pada simpul DOM bukan komponen (mis <div ref={this.divRef} /> ) Maka this.divRef.currentakan mengembalikan elemen DOM yang mendasarinya alih-alih instance komponen.
Referensi Callback
Properti ini mengambil fungsi panggilan balik yang diberikan referensi ke komponen terlampir. Callback ini dijalankan segera setelah komponen dipasang atau dilepas.
Sebagai contoh:
<FieldEditor
ref={(fieldEditor1) => {this.fieldEditor1 = fieldEditor1;}
{...props}
/>
Dalam contoh-contoh ini referensi disimpan pada komponen induk. Untuk memanggil komponen ini dalam kode Anda, Anda dapat menggunakan:
this.fieldEditor1
dan kemudian gunakan this.fieldEditor1.stateuntuk mendapatkan status.
Satu hal yang perlu diperhatikan, pastikan komponen anak Anda telah dirender sebelum Anda mencoba mengaksesnya ^ _ ^
Seperti di atas, jika Anda menggunakan referensi ini pada simpul DOM alih-alih komponen (mis. <div ref={(divRef) => {this.myDiv = divRef;}} />) Maka this.divRefakan mengembalikan elemen DOM yang mendasarinya alih-alih instance komponen.
Informasi lebih lanjut
Jika Anda ingin membaca lebih lanjut tentang properti ref React, periksa halaman ini dari Facebook.
Pastikan Anda membaca bagian " Don't Overuse Refs " yang mengatakan bahwa Anda tidak boleh menggunakan anak itustate untuk "mewujudkan sesuatu".
Semoga ini bisa membantu ^ _ ^
Sunting: Menambahkan React.createRef()metode untuk membuat referensi. Kode ES5 dihapus.