Có sự khác biệt "đằng sau hậu trường" nào khi thiết lập innerHTML của phần tử so với cài đặt thuộc tính dangerouslySetInnerHTML trên một phần tử không? Giả sử tôi đang khử trùng đúng cách vì mục đích đơn giản.React.js: Đặt bên trongHTML vs dangerouslySetInnerHTML
Ví dụ:
var test = React.createClass({
render: function(){
return (
<div contentEditable='true' dangerouslySetInnerHTML={{ __html: "Hello" }}></div>
);
}
});
vs
var test = React.createClass({
componentDidUpdate: function(prevProp, prevState){
this.refs.test.innerHTML = "Hello";
},
render: function(){
return (
<div contentEditable='true' ref='test'></div>
);
}
});
tôi đang làm một cái gì đó nhiều hơn một chút phức tạp hơn so với ví dụ trên, nhưng ý tưởng chung là như nhau
Tôi đã viết một bài kiểm tra nhỏ, phi khoa học để hiển thị sự khác biệt giữa việc chèn một SVG và sử dụng 'dangerouslySetInnerHTML': https://www.webpackbin.com/bins/-KepHa-AMxQgGxOUnAac - điều chỉnh phương thức innerHTML là nhanh gấp hai lần (xem bảng điều khiển trong webpackbin) – Joscha
Đó là sự thật và dễ dự đoán. Vì innerHTML là một phương thức gốc liên kết mã SVG trực tiếp với DOM mà không xem xét bất cứ điều gì. Mặt khác, dangerouslySetInnerHTML là phương thức đến từ React rằng mã SVG phải được phân tích cú pháp như các thành phần React Children trước khi đưa chúng vào DOM ảo và sau đó đưa vào DOM. – Up209d