Saya sedang membangun sesuatu dengan React di mana saya harus memasukkan HTML dengan React Variables di JSX. Apakah ada cara untuk memiliki variabel seperti:
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
dan memasukkannya ke dalam reaksi seperti itu, dan membuatnya bekerja?
render: function() {
return (
<div className="content">{thisIsMyCopy}</div>
);
}
dan sudahkah memasukkan HTML seperti yang diharapkan? Saya belum melihat atau mendengar apa pun tentang fungsi reaksi yang dapat melakukan inline ini, atau metode mengurai hal-hal yang memungkinkan ini berfungsi.
<head>
?Catatan yang
dangerouslySetInnerHTML
bisa berbahaya jika Anda tidak tahu apa yang ada di string HTML yang Anda suntikkan.Ini karena kode sisi klien jahat dapat disuntikkan melalui tag skrip.Mungkin ide yang baik untuk membersihkan string HTML melalui utilitas seperti DOMPurify jika Anda tidak 100% yakin HTML yang Anda render adalah XSS (cross-site scripting) aman.
Contoh:
sumber
import DOMPurify from 'dompurify' const thisIsMyCopy = '<Alert severity="warning">copy copy copy <strong>strong copy</strong></Alert >'; render: function() { return ( <div className="content" dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(thisIsMyCopy)}}></div> ); }
hazardouslySetInnerHTML memiliki banyak kelemahan karena diatur di dalam tag.
Saya sarankan Anda untuk menggunakan beberapa wrapper reaksi seperti yang saya temukan di sini pada npm untuk tujuan ini. html-react-parser melakukan pekerjaan yang sama.
Sangat sederhana :)
sumber
Dengan menggunakan
''
Anda membuatnya ke string. Gunakan tanpa koma terbalik itu akan berfungsi dengan baik.sumber
Untuk menghindari kesalahan linter, saya menggunakannya seperti ini:
sumber
Dengan menggunakan '' set nilai ke string dan Bereaksi tidak memiliki cara untuk mengetahui bahwa itu adalah elemen HTML. Anda dapat melakukan yang berikut untuk memberi tahu React bahwa itu adalah elemen HTML -
''
dan itu akan berhasil<Fragment>
untuk mengembalikan elemen HTML.sumber
thisIsMyCopy
itu sendiri JSX, bukan string HTML. Jadi Anda benar-benar menempelkan JSX ke dalam BEJ.Jika ada orang lain yang masih mendarat di sini. Dengan ES6 Anda dapat membuat variabel html seperti:
sumber
{}
dan seluruh string dalam beberapa markup seperti itu(<span>{telephoneNumber} <br /> {email}</span>)
<p>copy copy copy <strong>strong copy</strong></p>
adalah string. Anda memilikinya sebagai BEJ.Anda juga dapat memasukkan HTML ini di ReactDOM seperti ini:
Berikut adalah dua tautan tautan dan tautan2 dari Bereaksi dokumentasi yang dapat membantu.
sumber