<style>
๋ด์ฅ ๋ธ๋ผ์ฐ์ <style> ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌธ์์ ์ธ๋ผ์ธ CSS ์คํ์ผ์ํธ๋ฅผ ์ถ๊ฐํ ์ ์์ต๋๋ค.
<style>{` p { color: red; } `}</style>๋ ํผ๋ฐ์ค
<style>
๋ฌธ์์ ์ธ๋ผ์ธ ์คํ์ผ์ ์ถ๊ฐํ๋ ค๋ฉด, ๋ด์ฅ ๋ธ๋ผ์ฐ์ <style> ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ์ธ์. ์ด๋ค ์ปดํฌ๋ํธ์์๋ <style>์ ๋ ๋๋งํ ์ ์์ผ๋ฉฐ, React๋ ํน์ ๊ฒฝ์ฐ์ ํด๋น DOM ์์๋ฅผ ๋ฌธ์์ <head>์ ๋ฐฐ์นํ๊ณ ๋์ผํ ์คํ์ผ์ ์ค๋ณต ์ ๊ฑฐํฉ๋๋ค.
<style>{` p { color: red; } `}</style>์๋ ์์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Props
<style>์ ๋ชจ๋ ๊ณตํต ์๋ฆฌ๋จผํธ Props๋ฅผ ์ง์ํฉ๋๋ค.
children: ๋ฌธ์์ด ํ์ . ํ์ ํญ๋ชฉ. ์คํ์ผ์ํธ์ ๋ด์ฉ.precedence: ๋ฌธ์์ด ํ์ . ๋ฌธ์์<head>๋ด ๋ค๋ฅธ ์์๋ค์ ๋นํด<style>DOM ๋ ธ๋์ ์์๋ฅผ ์ง์ ํ์ฌ, ์ด๋ค ์คํ์ผ์ํธ๊ฐ ๋ค๋ฅธ ์คํ์ผ์ํธ๋ฅผ ๋ฎ์ด์ธ ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค. React๋ ๋จผ์ ๋ฐ๊ฒฌํ ์ฐ์ ์์๋ฅผ โ๋ฎ๊ฒโ, ๋์ค์ ๋ฐ๊ฒฌํ ์ฐ์ ์์๋ฅผ โ๋๊ฒโ ์ถ๋ก ํฉ๋๋ค. ๋ง์ ์คํ์ผ ์์คํ ์ ์คํ์ผ ๊ท์น์ด ์์์ ์ด๊ธฐ ๋๋ฌธ์ ๋จ์ผ ์ฐ์ ์์ ๊ฐ์ ์ฌ์ฉํด๋ ์ ์๋ํ ์ ์์ต๋๋ค. ๋์ผํ ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ์คํ์ผ์ํธ๋<link>ํ๊ทธ์ธ์ง ์ธ๋ผ์ธ<style>ํ๊ทธ์ธ์งpreinitํจ์๋ก ๋ก๋๋ ๊ฒ์ธ์ง์ ๋ฌด๊ดํ๊ฒ ํจ๊ป ์ ์ฉ๋ฉ๋๋ค.href: ๋ฌธ์์ด ํ์ . ๋์ผํhref๋ฅผ ๊ฐ์ง ์คํ์ผ์ ์ค๋ณต ์ ์ฉ์ ์ ๊ฑฐํฉ๋๋ค.media: ๋ฌธ์์ด ํ์ . ์คํ์ผ์ํธ๋ฅผ ํน์ ๋ฏธ๋์ด ์ฟผ๋ฆฌ๋ก ์ ํํฉ๋๋ค.nonce: ๋ฌธ์์ด ํ์ . ์๊ฒฉํ ์ฝํ ์ธ ๋ณด์ ์ ์ฑ ์ ์ฌ์ฉํ ๋ ๋ฆฌ์์ค๋ฅผ ํ์ฉํ๊ธฐ ์ํ ์ํธํ ๋์์ ๋๋ค.title: ๋ฌธ์์ด ํ์ . ๋์ฒด ์คํ์ผ์ํธ์ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
๋ค์ React ์์ฑ๋ค์ ๊ถ์ฅํ์ง ์์ต๋๋ค.
blocking: ๋ฌธ์์ด ํ์ ."render"๋ก ์ค์ ํ๋ฉด ์คํ์ผ์ํธ๊ฐ ๋ก๋๋ ๋๊น์ง ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋ ๋๋งํ์ง ์๋๋ก ์ง์ํฉ๋๋ค. React๋ Suspense๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ธ๋ฐํ๊ฒ ์ ์ดํ ์ ์์ต๋๋ค.
ํน๋ณํ ๋ ๋๋ง ๋์
React๋ <style> ์ปดํฌ๋ํธ๋ฅผ ๋ฌธ์์ <head>๋ก ์ด๋์ํค๊ณ , ๋์ผํ ์คํ์ผ์ํธ์ ์ค๋ณต์ ์ ๊ฑฐํ๋ฉฐ, ์คํ์ผ์ํธ๊ฐ ๋ก๋ฉ๋๋ ๋์ ์์คํ์คํ ์ ์์ต๋๋ค.
์ด ๋์์ ์ฌ์ฉํ๋ ค๋ฉด href์ precedence ์์ฑ์ ์ ๊ณตํ์ธ์. React๋ ๋์ผํ href๋ฅผ ๊ฐ์ง ์คํ์ผ์ ์ค๋ณต์ ์ ๊ฑฐํฉ๋๋ค. precedence ์์ฑ์ ๋ฌธ์์ <head> ๋ด ๋ค๋ฅธ ์์์ ๋นํด <style> DOM ๋
ธ๋์ ์์๋ฅผ ์ง์ ํ๋ฉฐ, ์ด๋ค ์คํ์ผ์ํธ๊ฐ ๋ค๋ฅธ ์คํ์ผ์ํธ๋ฅผ ๋ฎ์ด์ธ ์ ์๋์ง๋ฅผ ๊ฒฐ์ ํฉ๋๋ค.
This special treatment comes with three caveats:
-
React will ignore changes to props after the style has been rendered. (React will issue a warning in development if this happens.)
-
React will drop all extraneous props when using the
precedenceprop (beyondhrefandprecedence). -
React may leave the style in the DOM even after the component that rendered it has been unmounted.
-
์คํ์ผ์ด ๋ ๋๋ง๋ ํ์๋ React๊ฐ Props ๋ณ๊ฒฝ์ ๋ฌด์ํฉ๋๋ค. (๊ฐ๋ฐ ์ค์ ์ด ์ํฉ์ด ๋ฐ์ํ๋ฉด React๋ ๊ฒฝ๊ณ ๋ฅผ ํ์ํฉ๋๋ค.)
-
React๋
precedenceProp์ ์ฌ์ฉํ ๋ ๋ถํ์ํ Props๋ฅผ ์ ๊ฑฐํฉ๋๋ค. (๋จ,href์precedence๋ ์ ์ธ.) -
์คํ์ผ์ ๋ ๋๋งํ ์ปดํฌ๋ํธ๊ฐ ๋ง์ดํธ ํด์ ๋ ํ์๋ DOM์ ์คํ์ผ์ด ์ ์ง๋ ์ ์์ต๋๋ค.
์ฌ์ฉ๋ฒ
์ธ๋ผ์ธ CSS ์คํ์ผ์ํธ ๋ ๋๋งํ๊ธฐ
์ปดํฌ๋ํธ๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ํ์๋๊ธฐ ์ํด ํน์ CSS ์คํ์ผ์ ์์กดํ๋ ๊ฒฝ์ฐ, ์ปดํฌ๋ํธ ๋ด์์ ์ธ๋ผ์ธ ์คํ์ผ์ํธ๋ฅผ ๋ ๋๋งํ ์ ์์ต๋๋ค.
React๋ ๋์ผํ href๋ฅผ ๊ฐ์ง ์คํ์ผ์ํธ์ ์ค๋ณต์ ์ ๊ฑฐํ๋ฏ๋ก href ์์ฑ์ ์คํ์ผ์ํธ๋ฅผ ๊ณ ์ ํ๊ฒ ์๋ณํด์ผ ํฉ๋๋ค.
precedence Prop์ ์ ๊ณตํ๋ฉด React๋ ์ปดํฌ๋ํธ ํธ๋ฆฌ์์ ํด๋น ๊ฐ์ด ํ์๋๋ ์์์ ๋ฐ๋ผ ์ธ๋ผ์ธ ์คํ์ผ์ํธ์ ์์๋ฅผ ๋ค์ ์ง์ ํฉ๋๋ค.
์ธ๋ผ์ธ ์คํ์ผ์ํธ๋ ๋ก๋ฉ ์ค์ด๋๋ผ๋ Suspense ๊ฒฝ๊ณ๋ฅผ ํธ๋ฆฌ๊ฑฐํ์ง ์์ต๋๋ค. ์ด๋, ๊ธ๊ผด์ด๋ ์ด๋ฏธ์ง์ ๊ฐ์ ๋น๋๊ธฐ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํ๋ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค.
import ShowRenderedHTML from './ShowRenderedHTML.js'; import { useId } from 'react'; function PieChart({data, colors}) { const id = useId(); const stylesheet = colors.map((color, index) => `#${id} .color-${index}: \{ color: "${color}"; \}` ).join(); return ( <> <style href={"PieChart-" + JSON.stringify(colors)} precedence="medium"> {stylesheet} </style> <svg id={id}> โฆ </svg> </> ); } export default function App() { return ( <ShowRenderedHTML> <PieChart data="..." colors={['red', 'green', 'blue']} /> </ShowRenderedHTML> ); }