Skip to content

dangerouslySetInnerHTML

김무성 edited this page Dec 2, 2021 · 1 revision
const highlights = (text: string) => {
  return text.replace(/#([\w|ㄱ-ㅎ|가-힣]+)/g, "<mark>$&</mark>");
};

const PostInfoModal = () => {
  return (
    ...
    <ModalContent>{highlights(post.postContent)}</ModalContent>
    ...
  );
}

위 코드와 같이, 개발 중 텍스트에서 정규식 패턴을 적용해 앞뒤로 태그를 붙여줘야 하는 경우가 생겼다. #태그 형태의 해시태그 문자열에 디자인을 주기 위함인데, 따라서 저렇게 문자열 형식을 React에서 태그로 변환해주길 바랬다.

스크린샷 2021-11-10 오후 6.21.49.png

하지만, 위 사진처럼 문자열 그 자체가 태그 내부에 value 값으로 들어가게 되었다.

문자열을 DOM Element로 변경해주는 함수가 있을지 검색 결과 이 포스트를 찾았다. 벨로퍼트 블로그에 따르면, React에서는 Cross-Site-Scripting(XSS) 공격을 막기 위해 렌더링 메서드 내부에 html 태그가 담겨있는 string 형태를 렌더링하면, 태그가 안 먹히고 문자열 그대로 렌더링 된다고 한다.

<ModalContent>
  <div dangerouslySetInnerHTML={{ __html: highlights(post.postContent) }}></div>
</ModalContent>

사용 방법은 위 코드와 같이, JSXElement가 아닌 일반적인 태그에 dangerousSetInnerHTML 속성을 전달하면 된다.

🍇 Home

Home

✨ Info

About Us

🤙 Team Rules

Ground Rule

GitHub 전략

🗓 Planning

프로젝트 설계

API 명세

ERD

백로그

와이어 프레임

📜 Project

기술 스택

자료실

고민거리

🔥 Progress

1️⃣ 1주차 Progress
2️⃣ 2주차 Progress
3️⃣ 3주차 Progress
4️⃣ 4주차 Progress
5️⃣ 5주차 Progress
6️⃣ 6주차 Progress

⏳ Meetings

0️⃣ 0주차 Meetings
1️⃣ 1주차 Meetings
2️⃣ 2주차 Meetings
3️⃣ 3주차 Meetings
4️⃣ 4주차 Meetings
5️⃣ 5주차 Meetings
6️⃣ 6주차 Meetings
Clone this wiki locally