React.js : innerHTML 대 위험한 설정
요소의 innerHTML을 설정하는 것과 요소에 dangerouslySetInnerHTML 속성을 설정하는 것과 "장면 뒤에"차이가 있습니까? 간단하게하기 위해 사물을 제대로 소독한다고 가정합니다.
예:
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>
);
}
});
위의 예제보다 조금 더 복잡한 작업을 수행하고 있지만 전반적인 아이디어는 동일합니다.
예, 차이가 있습니다!
innerHTML
vs 를 사용하는 즉시 효과 dangerouslySetInnerHTML
는 동일합니다. DOM 노드는 삽입 된 HTML로 업데이트됩니다.
그러나 사용할 때 배후에서 dangerouslySetInnerHTML
React는 해당 구성 요소 내부의 HTML이 신경 쓰지 않는 것을 알 수 있습니다.
React는 가상 DOM을 사용하기 때문에 diff를 실제 DOM과 비교할 때 HTML이 다른 소스에서 오는 것을 알고 있기 때문에 해당 노드의 자식을 검사하지 않고 바로 우회 할 수 있습니다 . 따라서 성능이 향상됩니다.
더 중요한 것은 단순히를 사용 innerHTML
하면 React는 DOM 노드가 수정되었음을 알 수있는 방법이 없다는 것입니다. 다음에 render
함수가 호출되면 React는 해당 DOM 노드의 올바른 상태로 생각되는 것을 수동으로 주입 한 컨텐츠 를 겹쳐 씁니다 .
componentDidUpdate
콘텐츠가 항상 동기화되도록하는 데 사용할 솔루션 은 효과가 있다고 생각하지만 각 렌더링 중에 플래시가있을 수 있습니다.
( dangerouslySetInnerHTML )을 기반으로 합니다.
원하는 것을 정확하게 수행하는 소품입니다. 그러나 그들은 신중하게 사용해야한다는 것을 전달하기 위해 이름을 지정합니다.
참고 URL : https://stackoverflow.com/questions/37337289/react-js-set-innerhtml-vs-dangerouslysetinnerhtml
'IT' 카테고리의 다른 글
Bootstrap은 왜 line-height 속성을 1.428571429로 설정합니까? (0) | 2020.07.04 |
---|---|
ES6 즉시 화살표 기능을 호출 (0) | 2020.07.04 |
버블 정렬 숙제 (0) | 2020.07.04 |
typeError : console.log.apply에서 잘못된 호출 (0) | 2020.07.04 |
템플릿 기반 양식과 반응 형 양식의 실제 차이점은 무엇입니까? (0) | 2020.07.04 |