Mengapa saya tidak bisa mengakses metode komponen dari "luar" di ReactJS? Mengapa itu tidak mungkin dan apakah ada cara untuk menyelesaikannya?
Pertimbangkan kodenya:
var Parent = React.createClass({
render: function() {
var child = <Child />;
return (
<div>
{child.someMethod()} // expect "bar", got a "not a function" error.
</div>
);
}
});
var Child = React.createClass({
render: function() {
return (
<div>
foo
</div>
);
},
someMethod: function() {
return 'bar';
}
});
React.renderComponent(<Parent />, document.body);
javascript
reactjs
dom
pengguna1518183
sumber
sumber
Pubsub
?Jawaban:
Bereaksi menyediakan antarmuka untuk apa yang Anda coba lakukan melalui
ref
atribut . Tetapkan komponen aref
, dancurrent
atributnya akan menjadi komponen khusus Anda:Catatan : Ini hanya akan berfungsi jika komponen anak dinyatakan sebagai kelas, sesuai dokumentasi yang ditemukan di sini: https://facebook.github.io/react/docs/refs-and-the-dom.html#adding-a- ref-to-a-class-komponen
Pembaruan 2019-04-01: Contoh yang diubah untuk menggunakan kelas dan
createRef
per dokumen Bereaksi terbaru.Update 2016/09/19: contoh Berubah menggunakan callback ref per bimbingan dari para
ref
atribut String docs.sumber
props
dan merender ulang dengan tepat.{(child) => this._child = child}
akan membuat Fungsi yang selalu dikembalikantrue
, tetapi nilai itu tidak digunakan olehref
atribut React .Jika Anda ingin memanggil fungsi pada komponen dari luar Bereaksi, Anda dapat memanggil mereka pada nilai balik dari renderComponent:
Satu-satunya cara untuk mendapatkan pegangan ke instance Komponen Bereaksi di luar Bereaksi adalah dengan menyimpan nilai pengembalian React.renderComponent. Sumber .
sumber
Atau, jika metode pada Child benar-benar statis (bukan produk dari alat peraga saat ini, nyatakan) Anda dapat mendefinisikannya
statics
dan kemudian mengaksesnya seperti halnya Anda menggunakan metode kelas statis. Sebagai contoh:sumber
Pada React 16.3
React.createRef
dapat digunakan, (digunakanref.current
untuk mengakses)sumber
Sejak Bereaksi 0.12 API sedikit berubah . Kode yang valid untuk menginisialisasi myChild adalah sebagai berikut:
sumber
Anda juga bisa melakukannya seperti ini, tidak yakin apakah itu rencana yang bagus: D
sumber
Seperti yang disebutkan dalam beberapa komentar,
ReactDOM.render
tidak lagi mengembalikan instance komponen. Anda dapat meneruskanref
panggilan balik ketika merender root komponen untuk mendapatkan instance, seperti:dan:
sumber
Cara lain sangat mudah:
fungsi di luar:
Ikatkan itu:
Silakan lihat tutorial lengkap di sini: Cara menggunakan "ini" dari Komponen Bereaksi dari luar?
sumber