Jika Anda melakukan ini hanya karena Anda ingin Anak memberikan sifat yang dapat digunakan kembali kepada orang tuanya, maka Anda dapat mempertimbangkan melakukan itu menggunakan render-props sebagai gantinya.
Teknik itu sebenarnya membalikkan struktur. The Child
sekarang membungkus orang tua, jadi saya telah berganti nama ke AlertTrait
bawah. Saya menjaga nama Parent
untuk kesinambungan, meskipun sekarang ini bukan orang tua.
// Use it like this:
<AlertTrait renderComponent={Parent}/>
class AlertTrait extends Component {
// You may need to bind this function, if it is stateful
doAlert() {
alert('clicked');
}
render() {
return this.props.renderComponent(this.doAlert);
}
}
class Parent extends Component {
render() {
return (
<button onClick={this.props.doAlert}>Click</button>
);
}
}
Dalam hal ini, AlertTrait menyediakan satu atau beberapa sifat yang dilewatkan sebagai renderComponent
penyangga ke komponen apa pun yang diberikan pada penyangga.
Orangtua menerima doAlert
sebagai alat peraga, dan dapat memanggilnya saat dibutuhkan.
(Untuk lebih jelasnya, saya menyebut prop renderComponent
dalam contoh di atas. Tetapi dalam React docs yang ditautkan di atas, mereka menyebutnya begitu render
.)
Komponen Trait dapat membuat hal-hal di sekitar Induk, dalam fungsi rendernya, tetapi tidak membuat apa pun di dalam induk. Sebenarnya itu bisa membuat hal-hal di dalam Induk, jika melewati prop lain (misrenderChild
) kepada orangtua, yang kemudian dapat digunakan orangtua selama metode rendernya.
Ini agak berbeda dari apa yang diminta OP, tetapi beberapa orang mungkin berakhir di sini (seperti yang kita lakukan) karena mereka ingin membuat sifat yang dapat digunakan kembali, dan berpikir bahwa komponen anak adalah cara yang baik untuk melakukan itu.