๐ dangerouslySetInnerHTML
dangerouslySetInnerHTML์ React์์ HTML์ ์ง์ ์ ์ผ๋ก DOM์ ์ฝ์ ํ ๋ ์ฌ์ฉํ๋ ์์ฑ์ด๋ค. ์ด ์ด๋ฆ์ dangerously๋ผ๋ ๋จ์ด๊ฐ ๋ค์ด๊ฐ ์ด์ ๋ HTML์ ์ง์ ์กฐ์ํ ๋ ๋ณด์ ์ํ์ด ์์ ์ ์์์ ๊ฐ์กฐํ๊ธฐ ์ํด์๋ค.
์ฌ์ฉ๋ฒ
dangerouslySetInnerHTML์ ๊ฐ์ฒด๋ฅผ ์์ฑ ๊ฐ์ผ๋ก ๋ฐ๊ณ , ์ด ๊ฐ์ฒด๋ __html ํค๋ฅผ ํฌํจํด์ผ ํ๋ค. ์ด ํค์ ๊ฐ์ผ๋ก๋ HTML ๋ฌธ์์ด์ด ๋ค์ด๊ฐ๋ค. ์ธ๋ถ์์ ๊ฐ์ ธ์จ HTML์ ์ฝ์ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ๋๋๋ฐ, React๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์ ์ ์ธ HTML ์ฝ์ ์ ๋ฐฉ์งํด์ XSS ๊ณต๊ฒฉ์ ๋ง์ผ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์, ์ด๋ฅผ ์ฐํํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
function MyComponent() {
return <div dangerouslySetInnerHTML={{ __html: '<strong>์๋
ํ์ธ์</strong>' }} />;
}
์ฅ์
- ์ง์ ์ ์ธ HTML ์ฝ์ : ๊ธฐ์กด HTML ๋ฌธ์์ด์ DOM์ ๋ฐ๋ก ์ฝ์ ํ ์ ์์ด์, ์๋ฒ๋ ์ธ๋ถ์์ ๊ฐ์ ธ์จ ๋งํฌ์ ์ ๊ทธ๋๋ก ๋ ๋๋งํ ๋ ์ ์ฉํ๋ค.
- ์ ์ฐ์ฑ: ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋๊ตฌ์์ ์์ฑ๋ HTML์ React ์ปดํฌ๋ํธ์ ํตํฉํ ์ ์๋ค.
๋จ์
- ๋ณด์ ์ํ: XSS ๊ณต๊ฒฉ์ ์ทจ์ฝํ๋ค. ์ธ๋ถ์์ ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๊ฐ ๊ฒ์ฆ๋์ง ์์ผ๋ฉด ์ ์์ ์ธ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋ ์ ์๋ค.
- SEO ์ต์ ํ: ์ ์ ์ธ ํ์ด์ง ์์ฑ์๋ ์ ํฉํ์ง ์๋ค. ํฌ๋กค๋ฌ๊ฐ JavaScript๋ฅผ ์คํํ๊ธฐ ์ ์ ํ์ด์ง์ ๋ด์ฉ์ ์ธ์ํ์ง ๋ชปํ ์๋ ์๋ค.
- ์ฑ๋ฅ ๋ฌธ์ : React์ ๊ฐ์ DOM๊ณผ์ ๋๊ธฐํ ๋ฌธ์ ๋ก ์ธํด ์ฑ๋ฅ์ด ์ ํ๋ ์ ์๋ค.
๋์ฒด ๋ฐฉ๋ฒ
- React ์ปดํฌ๋ํธ ์ฌ์ฉ: HTML์ React ์ปดํฌ๋ํธ๋ก ๋ณํํด์ ์ฌ์ฉํ๋ค. ์ด ๋ฐฉ๋ฒ์ XSS ๊ณต๊ฒฉ์ ์ํ์ ์ค์ด๊ณ , React์ ์ฑ๋ฅ ์ต์ ํ๋ฅผ ์ ์งํ ์ ์๋ค.
- DOMPurify์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ: ์ธ๋ถ HTML์ ์ฝ์ ํ๊ธฐ ์ ์ ํด๋ฆฐ์ ํ๊ณ ์์ ํ๊ฒ ๋ง๋ ๋ค. ์ด ๋ฐฉ๋ฒ์ ์ํํ ํ๊ทธ์ ์์ฑ์ ์ ๊ฑฐํ์ฌ ์์ ํ HTML๋ง ์ฝ์ ๋๋๋ก ํ๋ค.
- Markdown ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ: ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ Markdown ํ ์คํธ๋ฅผ ์์ ํ๊ฒ HTML๋ก ๋ณํํ ์ ์๋ค. ์ด ๋ฐฉ๋ฒ์ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ด๋ ์ฝ๋ฉํธ ์์คํ ์ ์ ์ฉํ๋ค.
dangerouslySetInnerHTML์ ์ฌ์ฉํ ๋๋ ๋ณด์์ ํนํ ์ฃผ์ํด์ผ ํ๊ณ , ๊ฐ๋ฅํ๋ฉด ์์ ํ ๋์ฒด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ํธ์ด ์ข๋ค.
'๐ฉโ๐ป hello, world! > react' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฌธ์์ด ๋ฐ์ดํฐ์ ์ค๋ฐ๊ฟ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ 3๊ฐ์ง (1) | 2024.11.18 |
---|---|
date-fns ๋ผ์ด๋ธ๋ฌ๋ฆฌ (1) | 2024.11.12 |
JSON Server ์ฌ์ฉ (1) | 2024.11.05 |
[error] es lint error - ์ค ๋ฐ๊ฟ ํ์ ์๋ฌ(CRLF/LF) (0) | 2024.11.05 |
[error] es lint error - Unknown options: extensions, resolvePluginsRelativeTo - 'extensions' has been removed. (0) | 2024.11.05 |