JSX에서 React Variables가있는 HTML을 삽입 해야하는 React로 무언가를 만들고 있습니다. 다음과 같은 변수를 갖는 방법이 있습니까?
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
이렇게 반응에 삽입하고 작동합니까?
render: function() {
return (
<div className="content">{thisIsMyCopy}</div>
);
}
예상대로 HTML을 삽입 했습니까? 나는이 인라인을 수행 할 수있는 반응 함수 또는 이것이 작동 할 수있는 것들을 파싱하는 방법에 대해 아무것도 보거나 듣지 못했습니다.
답변
당신이 사용할 수있는 dangerouslySetInnerHTML를 , 예를 들어,
render: function() {
return (
<div className="content" dangerouslySetInnerHTML={{__html: thisIsMyCopy}}></div>
);
}
답변
주 dangerouslySetInnerHTML
당신이 주입 된 HTML 문자열이 무엇인지 모르는 경우 위험 할 수 있습니다. 스크립트 태그를 통해 악의적 인 클라이언트 측 코드를 삽입 할 수 있기 때문입니다.
렌더링하는 HTML이 XSS (Cross-Site Scripting) 안전하다는 것을 100 % 확신 할 수 없다면 DOMPurify 와 같은 유틸리티를 통해 HTML 문자열을 삭제하는 것이 좋습니다 .
예:
import DOMPurify from 'dompurify'
const thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
render: function() {
return (
<div className="content" dangerouslySetInnerHTML={{__html: DOMPurify.sanitize(thisIsMyCopy)}}></div>
);
}
답변
risklySetInnerHTML 은 태그 내부에 설정되어 있기 때문에 많은 단점이 있습니다.
이 목적으로 npm에서 찾은 것처럼 반응 래퍼를 사용하는 것이 좋습니다.
html-react-parser 도 같은 작업을 수행합니다.
import Parser from 'html-react-parser';
var thisIsMyCopy = '<p>copy copy copy <strong>strong copy</strong></p>';
render: function() {
return (
<div className="content">{Parser(thisIsMyCopy)}</div>
);
}
아주 간단한 🙂
답변
를 사용하여 ''
문자열로 만듭니다. 쉼표를 거꾸로 사용하지 않으면 정상적으로 작동합니다.
답변
린터 오류를 피하기 위해 다음과 같이 사용합니다.
render() {
const props = {
dangerouslySetInnerHTML: { __html: '<br/>' },
};
return (
<div {...props}></div>
);
}
답변
import { Fragment } from 'react' // react version > 16.0
var thisIsMyCopy = (
<Fragment>
<p>copy copy copy
<strong>strong copy</strong>
</p>
</Fragment>
)
”을 사용하면 값이 문자열로 설정되고 React는 그것이 HTML 요소인지 알 방법이 없습니다. React에 HTML 요소임을 알리기 위해 다음을 수행 할 수 있습니다.
- 제거하면
''
작동합니다. <Fragment>
HTML 요소를 반환하는 데 사용 합니다.
답변
다른 사람이 여전히 여기에 온다면 ES6을 사용하면 다음과 같이 html 변수를 만들 수 있습니다.
render(){
var thisIsMyCopy = (
<p>copy copy copy <strong>strong copy</strong></p>
);
return(
<div>
{thisIsMyCopy}
</div>
)
}