Garis tunggal berfungsi dengan baik
render: function () {
return (
{[1,2,3].map(function (n) {
return <p>{n}</p>
}}
);
}
bukan untuk beberapa baris
render: function () {
return (
{[1,2,3].map(function (n) {
return (
<h3>Item {n}</h3>
<p>Description {n}</p>
)
}}
);
}
Terima kasih.
return ("asdf" "asdf");
Anda inginkanreturn ["asdf", "asdf"];
Jawaban:
Cobalah untuk menganggap tag sebagai panggilan fungsi (lihat dokumen ). Kemudian yang pertama menjadi:
Dan yang kedua:
Sekarang seharusnya sudah jelas bahwa cuplikan kedua tidak benar-benar masuk akal (Anda tidak dapat mengembalikan lebih dari satu nilai di JS). Anda harus membungkusnya dengan elemen lain (kemungkinan besar apa yang Anda inginkan, dengan begitu Anda juga dapat memberikan
key
properti yang valid ), atau Anda dapat menggunakan sesuatu seperti ini:Dengan gula JSX:
Anda tidak perlu meratakan array yang dihasilkan, React akan melakukannya untuk Anda. Lihat biola berikut http://jsfiddle.net/mEB2V/1/ . Sekali lagi: Membungkus kedua elemen menjadi div / bagian kemungkinan besar akan lebih baik untuk jangka panjang.
sumber
Uncaught Error: Invariant Violation: Product.render(): A valid ReactComponent must be returned. You may have returned undefined, an array or some other invalid object.
<div>{ this.props.foos.map(function() { return <Foo /> }) }</div>
. Tetapirender
fungsi komponen tidak dapat mengembalikan larik itu tanpa membungkusnya, misalnya dalam sebuah div.Sepertinya jawaban lama tentang mengembalikan array tidak lagi berlaku (mungkin sejak React ~ 0.9, seperti yang ditulis @ dogmatic69 dalam komentar ).
Dokumen mengatakan Anda perlu mengembalikan satu node:
Dalam banyak kasus, Anda cukup membungkus sesuatu dalam a
<div>
atau a<span>
.Dalam kasus saya, saya ingin mengembalikan beberapa
<tr>
s. Saya membungkusnya dalam sebuah<tbody>
- tabel diperbolehkan untuk memiliki banyak badan.EDIT: Pada React 16.0, mengembalikan array tampaknya diizinkan lagi, selama setiap elemen memiliki
key
: https://facebook.github.io/react/blog/2017/09/26/react-v16.0.html # new-render-return-types-fragments-and-stringsEDIT: React 16.2 memungkinkan Anda mengelilingi daftar elemen dengan
<Fragment>…</Fragment>
atau bahkan<>…</>
, jika Anda lebih suka itu daripada array: https://blog.jmes.tech/react-fragment-and-semantic-html/sumber
<li>
? Dengan asumsi bahwa saya tidak bisa begitu saja membungkus semuanya<ul>
<li><ul><li>one</li><li>two</li></ul></li>
jika itu berhasil dalam situasi Anda. Atau: div pembungkus tidak sepenuhnya valid tetapi mungkin berfungsi dengan baik di semua browser yang relevan? Jika Anda mencobanya, beri tahu kami.li
dalamspan
ataudiv
tidak bekerja dengan baik bagi saya. Div secara serius merusak rendering, dan, setidaknya dalam kasus penggunaan saya, span mengacaukan CSS. 2 ¢: Mencoba mengembalikan beberapa himpunan bagian darili
s adalah kode bau. Kami menggunakanul
sebagai semacam menu tarik-turun, dan saya awalnya ingin banyak komponen mengembalikan "bagian" darili
s. Pada akhirnya, lebih baik meletakkan semua kode menu ke dalam satu komponen "berlabuh"ul
daripada memasukkannyali
dari berbagai sumber. Saya pikir itu juga membuat model mental untuk UI sedikit lebih bersih.Dari React v16.0.0 dan seterusnya, dimungkinkan untuk mengembalikan banyak elemen dengan membungkusnya di dalam file
Array
Juga dari React v16.2.0 , fitur baru bernama
React Fragments
diperkenalkan yang dapat Anda gunakan untuk membungkus banyak elemenSesuai dokumentasi:
sumber
Juga, Anda mungkin ingin mengembalikan beberapa item daftar di beberapa fungsi pembantu di dalam komponen React. Cukup kembalikan array node html dengan
key
atribut:sumber
Anda dapat menggunakan di
createFragment
sini.https://facebook.github.io/react/docs/create-fragment.html
(menggunakan sintaks ES6 dan JSX di sini)
Anda harus menambahkan
react-addons-create-fragment
paket terlebih dahulu:Keuntungan dari solusi Jan Olaf Krems: bereaksi tidak mengeluh tentang yang hilang
key
sumber
Diperbarui
Gunakan React Fragment. Itu mudah. Tautan ke dokumentasi fragmen.
Jawaban lama - usang
Dengan React> 16 Anda dapat menggunakan react-composite .
Tentu saja, react-composite harus dipasang.
sumber
Ini sederhana dengan fragmen React
<></>
danReact.Fragment
:sumber