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 ref
untuk 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.state
untuk 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.current
akan 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.state
untuk 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.divRef
akan 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.