[React] 문자열을 HTML(JSX)로 출력하기 (innerHTML처럼)
API로 데이터를 가져와 매핑하는데 화면에 HTML 태그가 String으로 출력되었다.
return (
<div className="search-result">
<ul className="result-list">
{
list && list.map((item) => (
<li key={ item.isbn }>
<h2>{ item.title }</h2>
<span>{ item.author }</span>
</li>
))
}
</ul>
</div>
)
네이버 API의 경우 패시지에서 검색어와 일치하는 부분은 <b></b>
태그로 감싸져 있다고 한다. 이 태그를 String이 아닌 JSX 태그로 인식하도록 설정해보자.
해결 방법
dangerouslySetInnerHTML
dangerouslySetInnerHTML
은 DOM에서 innerHTML
을 사용하기 위한 리액트의 대체 방법이다.
일반적으로 코드에서 HTML을 세팅하는 행위는 XXS(교차 사이트 스크립팅) 공격에 노출된다. 따라서 위험하다는 걸 상기시키기 위해 dangerouslySetInnerHTML
를 작성하고 __html
키로 객체를 전달해야 한다.
📎 dangerouslySetInnerHTML 관련 문서
dangerously...🔥 왠지 굉장히 위험한 느낌이지만 dangerouslySetInnerHTML
이나 innerHTML
이나 코드로 HTML을 세팅하는 것이기 때문에 둘 다 주의해서 사용해야 한다.
innerHTML
을 사용하면 DOM의 변경을 인식하지 못한다. 대신 dangerouslySetInnerHTML
를 사용하게 되면 가상 DOM과 실제 DOM을 비교해 변경된 곳을 리렌더링 해준다.
return (
<div className="search-result">
<ul className="result-list">
{
list && list.map((item) => (
<li key={ item.isbn }>
<h2 dangerouslySetInnerHTML={{__html: item.title}}></h2>
<span>{ item.author }</span>
</li>
))
}
</ul>
</div>
)
Author And Source
이 문제에 관하여([React] 문자열을 HTML(JSX)로 출력하기 (innerHTML처럼)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@nemo/string-to-jsx저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)