Anda dapat menggunakan React.cloneElement
, lebih baik untuk mengetahui cara kerjanya sebelum Anda mulai menggunakannya di aplikasi Anda. Itu diperkenalkan di React v0.13
, baca terus untuk informasi lebih lanjut, jadi sesuatu bersama ini bekerja untuk Anda:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
Jadi bawalah baris-baris dari React dokumentasi agar Anda memahami bagaimana semuanya bekerja dan bagaimana Anda dapat menggunakannya:
Di React v0.13 RC2 kami akan memperkenalkan API baru, mirip dengan React.addons.cloneWithProps, dengan tanda tangan ini:
React.cloneElement(element, props, ...children);
Tidak seperti cloneWithProps, fungsi baru ini tidak memiliki perilaku bawaan sihir untuk menggabungkan gaya dan className karena alasan yang sama kami tidak memiliki fitur itu dari transferPropsTo. Tidak ada yang yakin apa sebenarnya daftar lengkap hal-hal ajaib, yang membuatnya sulit untuk berpikir tentang kode dan sulit untuk digunakan kembali ketika gaya memiliki tanda tangan yang berbeda (misalnya dalam React Native yang akan datang).
React.cloneElement hampir setara dengan:
<element.type {...element.props} {...props}>{children}</element.type>
Namun, tidak seperti JSX dan cloneWithProps, ia juga mempertahankan referensi. Ini berarti bahwa jika Anda mendapatkan seorang anak dengan ref di atasnya, Anda tidak akan sengaja mencurinya dari leluhur Anda. Anda akan mendapatkan referensi yang sama dengan elemen baru Anda.
Satu pola umum adalah memetakan anak-anak Anda dan menambahkan properti baru. Ada banyak masalah yang dilaporkan tentang cloneWithProps kehilangan wasit, membuatnya lebih sulit untuk alasan tentang kode Anda. Sekarang mengikuti pola yang sama dengan cloneElement akan berfungsi seperti yang diharapkan. Sebagai contoh:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
Catatan: React.cloneElement (child, {ref: 'newRef'}) TIDAK menimpa ref sehingga masih tidak mungkin bagi dua orang tua untuk memiliki ref untuk anak yang sama, kecuali jika Anda menggunakan ref-callback.
Ini adalah fitur penting untuk masuk ke React 0,13 karena alat peraga sekarang tidak dapat diubah. Jalur peningkatan seringkali untuk mengkloning elemen, tetapi dengan melakukan itu Anda mungkin kehilangan referensi. Oleh karena itu, kami memerlukan jalur peningkatan yang lebih baik di sini. Ketika kami meningkatkan callites di Facebook, kami menyadari bahwa kami membutuhkan metode ini. Kami mendapat umpan balik yang sama dari komunitas. Karena itu kami memutuskan untuk membuat RC lain sebelum rilis final untuk memastikan kami mendapatkannya.
Kami berencana untuk akhirnya mencabut React.addons.cloneWithProps. Kami belum melakukannya, tetapi ini adalah kesempatan yang baik untuk mulai berpikir tentang penggunaan Anda sendiri dan pertimbangkan untuk menggunakan React.cloneElement sebagai gantinya. Kami pasti akan mengirimkan rilis dengan pemberitahuan penghentian sebelum kami benar-benar menghapusnya sehingga tidak ada tindakan segera diperlukan.
lebih lanjut di sini ...