Apakah ada cara untuk melewatkan satu komponen ke komponen reaksi lainnya? Saya ingin membuat model komponen reaksi dan mengirimkan komponen reaksi lain untuk mentransklusikan konten itu.
Sunting: Ini adalah kode reaksiJS yang menggambarkan apa yang saya coba lakukan. http://codepen.io/aallbrig/pen/bEhjo
HTML
<div id="my-component">
<p>Hi!</p>
</div>
ReactJS
/**@jsx React.DOM*/
var BasicTransclusion = React.createClass({
render: function() {
// Below 'Added title' should be the child content of <p>Hi!</p>
return (
<div>
<p> Added title </p>
{this.props.children}
</div>
)
}
});
React.renderComponent(BasicTransclusion(), document.getElementById('my-component'));
javascript
reactjs
Andrew Allbright
sumber
sumber
this.props.children
adalah bagian dari komponen API dan diharapkan dapat digunakan dengan cara ini. Contoh-contoh tim Bereaksi menggunakan teknik ini, seperti dalam mentransfer alat peraga dan ketika berbicara tentang seorang anak tunggal .Catatan saya memberikan jawaban yang lebih mendalam di sini
Pembungkus Runtime:
Itu cara yang paling idiomatis.
Perhatikan bahwa itu
children
adalah "prop khusus" dalam Bereaksi, dan contoh di atas adalah gula sintaksis dan (hampir) setara dengan<Wrapper children={<App/>}/>
Pembungkus inisialisasi / HOC
Anda dapat menggunakan Komponen Pesanan Tinggi (HOC). Mereka telah ditambahkan ke dokumen resmi baru-baru ini.
Hal ini dapat menyebabkan (sedikit) kinerja yang lebih baik karena komponen pembungkus dapat membuat hubungan pendek rendering selangkah lebih maju dengan shouldComponentUpdate, sementara dalam kasus pembungkus runtime, anak-anak cenderung akan selalu menjadi ReactElement yang berbeda dan menyebabkan pengubahan ulang. bahkan jika komponen Anda memperpanjang PureComponent.
Perhatikan bahwa
connect
Redux dulu merupakan pembungkus runtime tetapi diubah menjadi HOC karena memungkinkan untuk menghindari rendering ulang yang tidak berguna jika Anda menggunakanpure
opsi (yang benar secara default)Anda seharusnya tidak pernah memanggil HOC selama fase render karena membuat komponen Bereaksi bisa mahal. Anda sebaiknya memanggil pembungkus ini saat inisialisasi.
Perhatikan bahwa ketika menggunakan komponen fungsional seperti di atas, versi HOC tidak memberikan optimasi yang berguna karena komponen fungsional stateless tidak diimplementasikan
shouldComponentUpdate
Penjelasan lebih lanjut di sini: https://stackoverflow.com/a/31564812/82609
sumber
sumber
Facebook merekomendasikan penggunaan komponen berkewarganegaraan Sumber: https://facebook.github.io/react/docs/reusable-components.html
sumber
Anda dapat melewatinya sebagai penyangga biasa:
foo={<ComponentOne />}
Sebagai contoh:
sumber
saya lebih suka menggunakan Bereaksi API bawaan:
maka Anda dapat mengganti div pembungkus dengan apa pun yang Anda inginkan:
sumber
Anda dapat mengirimkan komponen melalui. alat peraga dan membuatnya dengan interpolasi.
Anda kemudian akan melewati
prop
dipanggilchild
, yang akan menjadi komponen Bereaksi.sumber
this.props.children
seperti yang disarankan dalam jawaban lain, Anda dapat menulis anak-anak sebagai anak-anak bukan attrs.<div child={this.props.child />
.React.DOM.div
, seperti semua komponen inti, menggunakanchildren
array. Lihatlah bagaimana ini digunakan dalamHello
komponen Anda , ia sudah menggunakan beberapa anak.Terlambat dalam permainan, tapi inilah pola HOC yang kuat untuk menimpa komponen dengan menyediakannya sebagai penyangga. Sederhana dan elegan.
Misalkan
MyComponent
merenderA
komponen fiksi tetapi Anda ingin membolehkan penimpaan kustomA
, dalam contoh iniB
, yang membungkusA
dalam<div>...</div>
dan juga menambahkan "!" ke prop teks:sumber
Sebenarnya, pertanyaan Anda adalah bagaimana cara menulis Komponen Tingkat Tinggi (HOC). Tujuan utama menggunakan HOC adalah mencegah copy paste. Anda dapat menulis HOC Anda sebagai komponen yang berfungsi murni atau sebagai kelas di sini adalah contoh:
Jika Anda ingin menulis komponen induk Anda sebagai komponen berbasis kelas:
Jika Anda ingin menulis orang tua Anda sebagai komponen fungsional:
sumber
Berikut adalah contoh komponen Daftar reaksi induk dan alat peraga siapa yang berisi elemen reaksi. Dalam hal ini, hanya satu link bereaksi komponen dilewatkan (seperti terlihat dalam dom render).
sumber
Ya, Anda dapat melakukannya dengan menggunakan alat peraga. Anda dapat mengirimkan data komponen sebagai objek seperti alat peraga dan kemudian di dalam komponen Anda dapat mengimpor komponen lain dan secara dinamis mengikat dengan data prpps. baca lebih lanjut tentang komponen reaksi
sumber