Inilah yang saya coba dan bagaimana kesalahannya.
Ini bekerja:
<div dangerouslySetInnerHTML={{ __html: "<h1>Hi there!</h1>" }} />
Ini tidak:
<div dangerouslySetInnerHTML={{ __html: this.props.match.description }} />
Properti deskripsi hanyalah string normal konten HTML. Namun itu diterjemahkan sebagai string, bukan sebagai HTML karena alasan tertentu.
Ada saran?
javascript
html
reactjs
jsx
Sergio Tapia
sumber
sumber
dangerouslySetInnerHTML
alih - alih menggunakanFragment
dari react v16. Periksa jawaban berikutnya oleh @ brad-adamsApakah
this.props.match.description
Apakah string atau suatu objek? Jika ini sebuah string, itu harus dikonversi ke HTML dengan baik. Contoh:Hasil: http://codepen.io/ilanus/pen/QKgoLA?editors=1011
Namun jika
description: <h1 style="color:red;">something</h1>
tanpa tanda kutip''
Anda akan mendapatkan:Jika ini sebuah string dan Anda tidak melihat markup HTML, satu-satunya masalah yang saya lihat adalah markup yang salah ..
MEMPERBARUI
Jika Anda berurusan dengan HTMLEntitles. Anda harus memecahkan kode sebelum mengirimnya
dangerouslySetInnerHTML
itu sebabnya mereka menyebutnya berbahaya :)Contoh kerja:
sumber
this.props.match.description
adalah string, bukan objek. Apa yang Anda maksud dengan markup yang salah? Apakah maksud Anda tag tidak tertutup? Bereaksi hanya harus membuatnya tidak?<p><strong>Our Opportunity:</strong></p>
Saya menggunakan 'react-html-parser'
Sumber di npmjs.com
Mengangkat komentar @ okram untuk lebih banyak visibilitas:
sumber
Converts HTML strings directly into React components avoiding the need to use dangerouslySetInnerHTML
dari npmjs.comA utility for converting HTML strings into React components. Avoids the use of dangerouslySetInnerHTML and converts standard HTML elements, attributes and inline styles into their React equivalents.
Jika Anda memiliki kendali atas dari mana string yang berisi html berasal (mis. Di suatu tempat di aplikasi Anda), Anda dapat mengambil manfaat dari
<Fragment>
API baru , melakukan sesuatu seperti:sumber
Fragment
API, itu selalu menyakitkan bagi saya, yang membutuhkanspan
pembungkus tambahan yang kadang-kadang mengacaukan tata letak fleksibel. Ketika saya menemukan pertanyaan ini untuk mencari solusi yang mungkin, saya pikir saya akan membagikan bagaimana saya menyelesaikan masalah.Some text <strong>wrapped with strong</strong>
berisi tag htmlstrong
.Anda hanya menggunakan metode React berbahaya
<div dangerouslySetInnerHTML={{ __html: htmlString }} />
Atau Anda dapat menerapkan lebih banyak dengan cara mudah ini: Merender HTML mentah di aplikasi Bereaksi
sumber
berbahayaInetHTML
hazardouslySetInnerHTML adalah pengganti React untuk menggunakan innerHTML di browser DOM. Secara umum, pengaturan HTML dari kode berisiko karena mudah untuk secara tidak sengaja mengekspos pengguna Anda terhadap serangan lintas situs (XSS). Jadi, Anda dapat mengatur HTML langsung dari Bereaksi, tetapi Anda harus mengetikkan berbahayaSetInnerHTML dan meneruskan objek dengan kunci __html, untuk mengingatkan diri sendiri bahwa itu berbahaya. Sebagai contoh:
sumber
Saya menggunakan innerHTML bersama-sama ref untuk span:
sumber
componentDidMount() { this.message.current.innerHTML = this.state.selectedMessage.body; }
tubuh adalah html yang lolos untuk saya.Dalam kasus saya, saya menggunakan react-render-html
Pertama instal paket dengan
npm i --save react-render-html
kemudian,
sumber
Saya tidak bisa mendapatkannya
npm build
bekerjareact-html-parser
. Namun, dalam kasus saya, saya berhasil menggunakan https://reactjs.org/docs/fragments.html . Saya memiliki persyaratan untuk menunjukkan beberapa karakter html unicode, tetapi mereka tidak boleh langsung disematkan di JSX. Di dalam BEJ, itu harus dipilih dari status Komponen. Cuplikan kode komponen diberikan di bawah ini:sumber
saya menggunakan https://www.npmjs.com/package/html-to-react
sumber
Jika Anda memiliki kontrol ke {this.props.match.description} dan jika Anda menggunakan JSX. Saya akan merekomendasikan untuk tidak menggunakan "hazardouslySetInnerHTML".
sumber