Dalam Bereaksi 16.2, dukungan yang ditingkatkan untuk Fragments
telah ditambahkan. Informasi lebih lanjut dapat ditemukan di posting blog React di sini.
Kita semua akrab dengan kode berikut:
render() {
return (
// Extraneous div element :(
<div>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</div>
);
}
Ya, kami membutuhkan div kontainer, tapi itu bukan masalah besar.
Dalam Bereaksi 16.2, kita bisa melakukan ini untuk menghindari div kontainer di sekitarnya:
render() {
return (
<Fragment>
Some text.
<h2>A heading</h2>
More text.
<h2>Another heading</h2>
Even more text.
</Fragment>
);
}
Dalam kedua kasus tersebut, kita masih membutuhkan elemen penampung yang mengelilingi elemen dalam.
Pertanyaan saya adalah, mengapa menggunakan yang Fragment
lebih disukai? Apakah itu membantu kinerja? Jika demikian, mengapa? Akan menyukai wawasan.
div
adalah Anda tidak selalu menginginkan elemen pembungkus. Elemen pembungkus memiliki arti dan biasanya Anda perlu gaya tambahan untuk menghapus makna itu.<Fragment>
hanyalah gula sintaksis yang tidak dirender. Ada situasi ketika membuat pembungkus sangat sulit, misalnya dalam SVG di mana<div>
tidak dapat digunakan dan<group>
tidak selalu seperti yang Anda inginkan.Jawaban:
div
s di tengah membuatnya sulit untuk mempertahankan tata letak yang diinginkan saat mengekstraksi komponen logis.Anda dapat menemukan deskripsi beberapa kasus penggunaan lain dalam masalah Bereaksi ini: Tambahkan API fragmen untuk memungkinkan pengembalian beberapa komponen dari render
sumber
<dt><dd>
menjadi jauh lebih mudah. Mengembalikan elemen yang berpasangan terasa canggung sebelumnyaFragments
.import Fragment from 'react'
. Tapi itu tidak terdefinisi dalam RN.number 2
, tabel sebenarnya merupakan masalah terbesar bagi kami. Struktur yang diperlukantable>tr>td
(mungkin denganthead
dan serupa) dibuat untuk beberapa kode Reaksi canggung.import {Fragment} from 'react'
? ini bernama ekspor.Menambah semua jawaban di atas ada satu keuntungan lagi: keterbacaan kode ,
Fragment
komponen mendukung bentuk gula sintaksis<>
,. Dengan demikian kode dalam pertanyaan Anda dapat ditulis lebih mudah sebagai:Menurut dokumen ,
Bebas kekacauan, bukan?
Perhatikan bahwa Anda masih perlu menggunakan
<Fragment>
sintaks jika Anda perlu memberikankey
fragmen.sumber
<Fragment>
Ini sesederhana ketika Anda tidak membutuhkan elemen pembungkus Anda tidak dipaksa untuk menggunakannya. Memiliki elemen yang lebih sedikit itu bagus, tetapi saya pikir manfaat terbesar adalah mampu membuat elemen dalam JSX yang sebelumnya tidak mungkin dan menambahkan makna semantik yang lebih baik untuk elemen pembungkus karena mereka opsional sekarang.
Ini tidak mungkin dilakukan sebelumnya:
Melirik hal-hal berikut dalam Bereaksi 15 Anda tidak dapat mengetahui apakah elemen pembungkus diperlukan atau tidak:
sumber
Sesuai reactjs.org docs kebutuhan yang paling penting dari
<Fragment> </Fragment>
bukan div adalah untuk menghindari semantik HTML melanggar. Ketika kita menggunakan div, bukannya<Fragment> </Fragment>
kita merusak semantik HTML.Untuk mengetahui lebih lanjut tentang html semantik. silakan klik dan ada juga kasus di mana jika Anda menggunakan div bukan Fragmen itu akan menjadi html tidak valid, misalnya lihat kode ini:
Fragmen memecahkan masalah ini.
sumber
<React.Fragment>...</React.Fragment>
, kita dapat menambahkan tag induk ke elemen JSX kami tanpa menambahkan simpul tambahan ke DOM.<>...</>.
sumber