Hari ini saya sudah mulai belajar ReactJS dan setelah satu jam dihadapkan pada masalah .. Saya ingin memasukkan sebuah komponen yang memiliki dua baris di dalam div pada halaman. Contoh sederhana dari apa yang saya lakukan di bawah ini.
Saya memiliki html:
<html>
..
<div id="component-placeholder"></div>
..
</html>
Render fungsi seperti ini:
...
render: function() {
return(
<div className="DeadSimpleComponent">
<div className="DeadSimpleComponent__time">10:23:12</div >
<div className="DeadSimpleComponent__date">MONDAY, 2 MARCH 2015</div>
</div>
)
}
....
Dan di bawah ini saya memanggil render:
ReactDOM.render(<DeadSimpleComponent/>, document.getElementById('component-placeholder'));
HTML yang dihasilkan terlihat seperti ini:
<html>
..
<div id="component-placeholder">
<div class="DeadSimpleComponent">
<div class="DeadSimpleComponent__time">10:23:12</div>
<div class="DeadSimpleComponent__date">MONDAY, 2 MARCH 2015</div>
</div>
</div>
..
</html>
Masalah yang saya tidak terlalu senang yaitu React memaksa saya untuk membungkus semua dalam div "DeadSimpleComponent". Apa solusi terbaik dan sederhana untuk itu, tanpa manipulasi DOM eksplisit?
UPDATE 28/7/2017: Maintainers of React menambahkan kemungkinan itu di React 16 Beta 1
Sejak React 16.2 , Anda dapat melakukan ini:
render() {
return (
<>
<ChildA />
<ChildB />
<ChildC />
</>
);
}
javascript
reactjs
Kirill Reznikov
sumber
sumber
Jawaban:
Persyaratan ini telah dihapus pada versi React (16.0)] 1 , jadi sekarang Anda dapat menghindari pembungkus itu.
Anda dapat menggunakan React.Fragment untuk membuat daftar elemen tanpa membuat node induk, contoh resmi:
Selengkapnya di sini: Fragmen
sumber
Perbarui 2017-12-05: React v16.2.0 sekarang sepenuhnya mendukung rendering fragmen dengan dukungan yang ditingkatkan untuk mengembalikan banyak turunan dari metode render komponen tanpa menentukan kunci pada turunan :
Jika Anda menggunakan versi React sebelum v16.2.0, Anda juga bisa menggunakan
<React.Fragment>...</React.Fragment>
:Asli:
React v16.0 memperkenalkan pengembalian array elemen dalam metode render tanpa membungkusnya dalam div: https://reactjs.org/blog/2017/09/26/react-v16.0.html
Saat ini, kunci diperlukan untuk setiap elemen untuk menghindari peringatan kunci tetapi ini dapat diubah di rilis mendatang:
sumber
Kamu bisa memakai:
Untuk detail lebih lanjut, lihat dokumentasi ini .
sumber
Gunakan [], bukan () untuk membungkus keseluruhan pengembalian.
sumber
Saya membuat komponen untuk membungkus komponen anak tanpa DIV. Ini disebut shadow wrapper: https://www.npmjs.com/package/react-shadow-wrapper
sumber
Ini masih diperlukan , TAPI React sekarang pastikan untuk membuat elemen tanpa membuat elemen DOM tambahan.
Pembungkusan ekstra diperlukan (biasanya dengan induk
div
) karenacreateElement
metode Reacts memerlukantype
parameter yaitueither a tag name string (such as 'div' or 'span'), a React component type (a class or a function)
. Tapi ini sebelum mereka memperkenalkan ReactFragment
.Lihat dokumen api BARU ini untuk createElement
berikut adalah contoh resminya, Refer React.Fragment .
sumber
Anda tidak akan bisa menyingkirkan
div
elemen itu. React.render () perlu mengembalikan satu simpul DOM yang valid.sumber
Berikut salah satu cara untuk merender komponen "transculent":
sumber
Ada solusi juga. Kode blok di bawah ini menghasilkan fragmen tanpa memerlukan React.Fragment.
sumber
Saya tahu pertanyaan ini telah terjawab, Anda tentu saja dapat menggunakan React.Fragment yang tidak membuat node tetapi memungkinkan Anda mengelompokkan hal-hal seperti div.
Selain itu, jika Anda ingin bersenang-senang, Anda dapat menerapkan (dan mempelajari banyak hal) mode React yang menghapus div ekstra dan untuk ini saya benar-benar ingin membagikan video yang bagus tentang bagaimana Anda dapat melakukannya di basis kode react itu sendiri.
https://www.youtube.com/watch?v=aS41Y_eyNrU
Ini tentu saja bukan sesuatu yang akan Anda lakukan dalam praktik tetapi ini adalah kesempatan belajar yang baik.
sumber