Loop di dalam Bereaksi BEJ
I'm mencoba untuk melakukan sesuatu seperti berikut dalam Bereaksi JSX
(di mana ObjectRow adalah komponen terpisah):
<tbody>
for (var i=0; i < numrows; i++) {
<ObjectRow/>
}
</tbody>
Saya menyadari dan memahami mengapa hal ini isn't valid JSX
, karena JSX
maps untuk fungsi panggilan. Namun, yang datang dari template dan lahan yang baru untuk JSX
, saya tidak yakin bagaimana saya akan mencapai di atas (menambahkan komponen beberapa kali).
1126
60
Anggap saja seperti anda're hanya memanggil fungsi JavaScript. Anda dapat't menggunakan
untuk
lingkaran di mana argumen untuk fungsi panggilan akan pergi:Lihat bagaimana fungsi
tbody
sedang berlaluuntuk
loop sebagai argumen, dan tentu saja itu's kesalahan sintaks.Tetapi anda dapat membuat sebuah array, dan kemudian lulus sebagai argumen:
Anda dapat menggunakan pada dasarnya struktur yang sama ketika bekerja dengan JSX:
Kebetulan, saya JavaScript contoh hampir persis apa itu contoh dari BEJ berubah menjadi. Bermain-main dengan Babel REPL untuk mendapatkan merasakan bagaimana JSX bekerja.
Tidak yakin apakah ini akan bekerja untuk situasi anda, tetapi sering peta adalah jawaban yang baik.
Jika ini adalah kode anda dengan untuk loop:
Anda bisa menulis seperti ini dengan peta:
ES6 sintaks:
Jika anda don't sudah memiliki sebuah array untuk
peta()
seperti @FakeRainBrigand's jawaban, dan ingin inline ini jadi sumber tata letak sesuai dengan output yang lebih dekat dari @SophieAlpert's jawaban:Dengan ES2015 (ES6) sintaks (menyebar dan panah fungsi)
http://plnkr.co/edit/mfqFWODVy8dKQQOkIEGV?p=preview
Re: transpiling dengan Babel, yang peringatan halaman mengatakan bahwa
Array.dari
diperlukan untuk menyebar, tetapi pada saat ini (v5.8.23
) itu tampaknya tidak menjadi kasus ketika menyebarkan sebenarnyaArray
. Saya memiliki dokumentasi masalah terbuka untuk mengklarifikasi itu. Tapi gunakan dengan resiko anda sendiri atau polyfill.Vanilla ES5
Array.menerapkan
Inline HIDUP
http://plnkr.co/edit/4kQjdTzd4w69g8Suu2hT?p=preview
Hanya menggunakan peta Array metode dengan ES6 sintaks:
Don't melupakan
kunci
properti.Menggunakan Array peta fungsi adalah cara yang sangat umum untuk loop melalui Hotel elemen-elemen dan membuat komponen sesuai mereka di Bereaksi, ini adalah cara yang bagus untuk melakukan loop yang cukup efisien dan rapi cara untuk melakukan loop di JSX, It's tidak satu-satunya cara untuk melakukan itu, tapi cara yang lebih disukai.
Juga, don't forget memiliki Kunci unik untuk setiap iterasi yang diperlukan. Fungsi peta menciptakan indeks yang unik dari 0 tetapi's tidak dianjurkan menggunakan yang dihasilkan indeks tetapi jika nilai anda adalah unik atau jika ada sebuah kunci yang unik, anda dapat menggunakan mereka:
Juga, beberapa baris dari MDN jika anda tidak akrab dengan peta fungsi pada Array:
Jika anda're sudah menggunakan lodash, yang
_.kali
fungsi ini berguna.Anda juga dapat mengekstrak luar kembali blok:
Saya tahu ini adalah thread lama, tapi mungkin anda ingin checkout Bereaksi Template, yang tidak membiarkan anda menggunakan jsx-gaya template dalam bereaksi, dengan beberapa arahan (seperti rt-repeat).
Contoh, jika anda menggunakan bereaksi-template, akan sama:
Ada beberapa cara untuk pergi tentang melakukan hal ini. JSX akhirnya akan dikompilasi untuk JavaScript, jadi selama anda're menulis berlaku JavaScript, anda'll menjadi baik.
Jawaban saya bertujuan untuk mengkonsolidasikan semua cara sudah disajikan berikut ini:
Jika anda tidak memiliki sebuah array dari objek, hanya jumlah baris:
dalam
kembali
block, menciptakan sebuahArray
dan menggunakanArray.prototipe.peta
:di luar
kembali
blok, hanya menggunakan JavaScript normal untuk loop:segera dipanggil ekspresi fungsi:
Jika anda memiliki sebuah array dari objek
dalam
kembali
blok.peta()
setiap objek ke<ObjectRow>
komponen:di luar
kembali
blok, hanya menggunakan JavaScript normal untuk loop:segera dipanggil ekspresi fungsi:
jika numrows adalah array, dan's sangat sederhana.
Array tipe data dalam Bereaksi sangat baik, array dapat membuat array baru, dan dukungan filter, mengurangi dll.
Ada beberapa jawaban yang menunjuk untuk menggunakan
peta
pernyataan. Berikut adalah contoh lengkap menggunakan iterator dalam FeatureList komponen untuk daftar * Fitur komponen-komponen didasarkan pada data JSON struktur yang disebut fitur**.Anda dapat melihat lengkap FeatureList kode pada GitHub. The memiliki perlengkapan yang tercantum di sini.
mari kita mengatakan bahwa kita memiliki sebuah array dari item di negara anda:
...Atau anda juga bisa mempersiapkan sebuah array dari objek dan peta itu untuk fungsi yang memiliki keluaran yang diinginkan. Saya lebih suka ini, karena itu membantu saya untuk menjaga praktek yang baik dari coding dengan tidak ada logika dalam kembali membuat.
Cukup gunakan
.peta()
untuk loop melalui koleksi anda dan kembali<ObjectRow>
item dengan alat peraga dari masing-masing iterasi.Dengan asumsi
objek
adalah array di suatu tempat...Jika anda memilih untuk mengubah ini dalam kembali( ) dari membuat metode, pilihan termudah akan menggunakan peta( ) metode. Peta array ke BEJ sintaks menggunakan peta() fungsi, seperti yang ditunjukkan di bawah ini (ES6 sintaks yang digunakan).
Di dalam induk komponen:
``
{ objectArray.peta((objek, index) => ) } ``Harap dicatat
kunci
atribut ditambahkan ke anak anda komponen. Jika anda didn't memberikan atribut kunci, anda dapat melihat peringatan berikut pada konsol anda.Sekarang di ObjectRow komponen anda dapat mengakses objek dari itu's properties.
Di dalam ObjectRow komponen
const { benda } = ini.alat peraga
atau
const object = ini.alat peraga.objek
Ini harus mengambil objek yang diturunkan dari induk komponen untuk variabel
objek
di ObjectRow komponen. Sekarang anda bisa meludah keluar nilai-nilai dalam objek yang sesuai dengan tujuan anda.Referensi :
peta() metode dalam Javascript
ECMA Script 6 atau ES6
Saya menggunakan ini:
PD: jangan lupa kunci atau anda akan memiliki banyak peringatan !
Sebuah ES2015 / Babel kemungkinan menggunakan generator fungsi untuk membuat array JSX:
ES2015 Array.dari dengan fungsi peta + kunci
Jika anda memiliki apa-apa
.peta()
anda dapat menggunakanArray.dari()
denganpeta
fungsi untuk mengulang unsur-unsur:Saya cenderung untuk mendukung pendekatan di mana logika pemrograman yang terjadi di luar nilai kembali dari
render
. Hal ini membantu menjaga apa yang sebenarnya diberikan mudah untuk grok.Jadi saya'd mungkin melakukan sesuatu seperti:
Memang ini adalah seperti sejumlah kecil dari kode yang inlining itu mungkin bekerja dengan baik.
Untuk loop untuk beberapa kali dan kembali, anda dapat mencapai itu dengan bantuan dari
tahun
danpeta
:di mana
i = jumlah kali