Saya ingin meneruskan teks dengan tag HTML, seperti:
<MyComponent text="This is <strong>not</strong> working." />
Tetapi di dalam MyComponent
metode render, ketika saya mencetak this.props.text
, itu benar-benar mencetak semuanya:
This is <strong>not</strong> working.
Apakah ada cara untuk membuat React mem-parse HTML dan membuangnya dengan benar?
<MyComponent>This is <strong>not</strong> working</MyComponent>
, alih-alih memberikannya sebagai properti. Bisakah Anda memberi lebih banyak konteks tentang apa yang sebenarnya Anda coba capai?Jawaban:
Anda dapat menggunakan array campuran dengan string dan elemen JSX (lihat dokumen di sini ):
Ada biola di sini yang menunjukkannya bekerja: http://jsfiddle.net/7s7dee6L/
Selain itu, sebagai upaya terakhir, Anda selalu memiliki kemampuan untuk memasukkan HTML mentah, tetapi berhati-hatilah karena hal itu dapat membuka Anda terhadap serangan skrip lintas situs (XSS) jika tidak membersihkan nilai properti.
sumber
{text.map( textOrHTML, index) => <span key={index}>{textOrHTML}</span> )}
Meskipun, sangat aneh bahwa kita harus melakukan ini sepenuhnya.key="[some unique value]"
pada<strong>
elemen.<MyComponent text={<>This is <strong>not</strong> working.</>} />
Sebenarnya, ada banyak cara untuk melakukannya.
Anda ingin menggunakan JSX di dalam properti Anda
Anda cukup menggunakan {} agar JSX mengurai parameter. Batasan satu-satunya adalah sama untuk setiap elemen JSX: Ini harus mengembalikan hanya satu elemen root.
Cara terbaik yang dapat dibaca untuk melakukannya adalah dengan membuat fungsi renderMyProp yang akan mengembalikan komponen JSX (seperti fungsi render standar) dan kemudian cukup memanggil myProp = {this.renderMyProp ()}
Anda hanya ingin meneruskan HTML sebagai string
Secara default, JSX tidak mengizinkan Anda merender HTML mentah dari nilai string. Namun, ada cara untuk melakukannya:
Kemudian di komponen Anda, Anda dapat menggunakannya seperti itu:
Berhati-hatilah karena solusi ini 'dapat' terbuka pada serangan pemalsuan skrip lintas situs. Juga berhati-hatilah karena Anda hanya dapat merender HTML sederhana, tanpa tag JSX atau komponen atau hal-hal mewah lainnya.
Cara array
Sebagai reaksi, Anda bisa melewatkan larik elemen JSX. Itu berarti:
Saya tidak akan merekomendasikan metode ini karena:
Cara anak-anak
Menambahkannya demi kelengkapan tetapi dalam bereaksi, Anda juga bisa mendapatkan semua anak yang ada 'di dalam' komponen Anda.
Jadi jika saya ambil kode berikut:
Kemudian dua div akan tersedia sebagai this.props.children di SomeComponent dan bisa dirender dengan sintaks {} standar.
Solusi ini sempurna ketika Anda hanya memiliki satu konten HTML untuk diteruskan ke Komponen Anda (Bayangkan komponen Popin yang hanya mengambil konten Popin sebagai anak-anak).
Namun, jika Anda memiliki banyak konten, Anda tidak dapat menggunakan anak-anak (atau Anda setidaknya perlu menggabungkannya dengan solusi lain di sini)
sumber
this.props.children
. Tanpa 's' reactjs.org/docs/glossary.html#propschildrenAnda dapat menggunakan hazardouslySetInnerHTML
Kirimkan saja html sebagai string biasa
Dan render dalam kode JSX seperti ini:
Berhati-hatilah jika Anda merender data yang dimasukkan oleh pengguna. Anda bisa menjadi korban serangan XSS
Berikut dokumentasinya: https://facebook.github.io/react/tips/dangerously-set-inner-html.html
sumber
dan kemudian di komponen Anda, Anda dapat melakukan pemeriksaan prop seperti:
Pastikan Anda memilih hanya satu jenis prop.
sumber
Dari React v16.02 Anda dapat menggunakan Fragment.
Info lebih lanjut: https://reactjs.org/blog/2017/11/28/react-v16.2.0-fragment-support.html
sumber
Bagi saya Ini bekerja dengan melewatkan tag html di alat peraga anak-anak
sumber
Pada aplikasi react sisi klien, ada beberapa cara untuk merender prop sebagai string dengan beberapa html. Yang satu lebih aman dari yang lain ...
1 - Tentukan prop sebagai jsx (preferensi saya)
• Satu-satunya persyaratan di sini adalah bahwa file apa pun yang menghasilkan prop ini perlu menyertakan React sebagai dependency (jika Anda membuat prop's jsx dalam file helper dll).
2 - Setel innerHtml dengan berbahaya
• Pendekatan kedua ini tidak disarankan. Bayangkan sebuah field input yang nilai inputnya di-render sebagai sebuah prop dalam komponen ini. Seorang pengguna dapat memasukkan tag skrip dalam masukan dan komponen yang membuat masukan ini akan menjalankan kode yang berpotensi berbahaya ini. Dengan demikian, pendekatan ini berpotensi menimbulkan kerentanan pembuatan skrip lintas situs. Untuk informasi lebih lanjut, lihat dokumen resmi React
sumber
Setel jenis teks prop ke sembarang dan lakukan ini:
Contoh
sumber
Anda dapat melakukannya dengan 2 cara yang saya ketahui.
1-
<MyComponent text={<p>This is <strong>not</strong> working.</p>} />
Dan kemudian lakukan ini
Atau pendekatan kedua lakukan seperti ini
2-
<MyComponent><p>This is <strong>not</strong> working.</p><MyComponent/>
Dan kemudian lakukan ini
sumber
let vhtml = "<p>Test</p>"
dan menggunakannya pada prop seperti initext={vhtml}
dan itu masih ditampilkan dalam teks biasa untuk beberapa alasan.@ matagus jawaban baik untuk saya, Semoga cuplikan di bawah ini membantu mereka yang ingin menggunakan variabel di dalamnya.
sumber
Dalam proyek saya, saya harus meneruskan cuplikan html dinamis dari variabel dan merendernya di dalam komponen. Jadi saya melakukan hal berikut.
objek defaultSelection diteruskan ke komponen dari
.js
fileKomponen HtmlSnippet
Contoh Plunkr
react doc untuk hazardouslySetInnerHTML
sumber
Anda juga bisa menggunakan fungsi pada komponen untuk meneruskan jsx melalui props. Suka:
sumber
Ya, Anda dapat melakukannya dengan menggunakan array campuran dengan string dan elemen JSX. referensi
sumber
Parser dari html-react-parser adalah solusi yang bagus. Anda harus melakukannya
sebut saja dengan:
dan itu bekerja dengan baik.
sumber
Menambah jawaban: Jika Anda berniat untuk mengurai dan Anda sudah berada di JSX tetapi memiliki objek dengan properti bersarang, cara yang sangat elegan adalah menggunakan tanda kurung untuk memaksa penguraian JSX:
sumber
Pertanyaan ini sudah memiliki banyak jawaban, tetapi saya telah melakukan sesuatu yang salah terkait dengan ini dan menurut saya layak untuk dibagikan:
Saya punya sesuatu seperti ini:
tetapi pijatannya lebih lama dari itu, jadi saya mencoba menggunakan sesuatu seperti ini:
Butuh beberapa saat bagi saya untuk menyadari bahwa saya kehilangan () dalam pemanggilan fungsi.
Tidak bekerja
Kerja
mungkin ini membantu Anda, seperti yang terjadi pada saya!
sumber
Anda berhasil menggunakan fragmen React untuk tugas ini. Tergantung pada versi yang Anda gunakan Bereaksi, Anda dapat menggunakan sintaks pendek:
<>
atau tag penuh:<React.Fragment>
. Berfungsi sangat baik jika Anda tidak ingin membungkus seluruh string dalam tag HTML.sumber
Kita bisa melakukan hal yang sama sedemikian rupa.
sekarang Anda ingin mengirim HTML ini ke dalam komponen lain yang bernama komponen Induk.
Menelepon: -
Penggunaan Anak: -
ini bekerja sempurna untuk saya.
sumber
Telah menambahkan html di componentDidMount menggunakan jQuery append. Ini seharusnya menyelesaikan masalah.
sumber