์๋ ์ ๋ฆฌ์กํธ ์ฒ์ ์ตํ๋ ๋ค ๊ณต๋ถํ๋ ๊ฒ ๊ฐ์๋ฐ, ํ๋ก์ ํธ๋ค์ ํ๋ค๋ณด๋ ๋น์ทํ ์ปดํฌ๋ํธ๋ฅผ ์์ฑํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ๋ฌด์ํ๊ณ ๊ณ์ ํ๋ค๊ฐ .. '์ ์๋ ์ ์ด๊ฑฐ ๊ณต๋ถํ์๋๋ฐ .. ' ์ถ์ด์ ์ ๋ฆฌํ๊ฒ๋๋ค.
์ผ๋จ ๊ทธ ์ ์ styled component ๋ฅผ ์ฐ๋ ์ด์ ๋
๊ธฐ์กด์ div๋ฅผ ๋ง๋ค๊ณ className ์ด๋ style์ ๋ถ์ฌํ๋ ์์ด์์ง๋ง,
๋์ styled๋ฅผ ์ํฌํธ ํด์ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ html ์์ ์ฌ์ฉํ๊ณ ์ถ์ ํ๊ทธ๋ฅผ ์ง์ ํ๊ณ , ๋ฐฑํฑ ์์ css์ฝ๋๋ฅผ ์ ์ด์ค๋ค. -> ์ปดํฌ๋ํธ
์ด๋ ๊ฒ ํ๊ฒ ๋๋ฉด ์คํ์ผ๋ง ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ, ์ปดํฌ๋ํธ ํจ์ ์์ ์คํ์ผ์ ์ ์ ํ์๊ฐ ์๊ณ , ๊ฐ๋ ์ฑ์ด ์ข์์ง๋ค.
๋๋ ํผ์งํ or ๋ง์ด ์ฌ์ฉํ ๋งํ ์ปดํฌ๋ํธ๋ค์ ์คํ์ผ ์ปดํฌ๋ํธ๋ก ์ง์ ํ๊ณ , ๊ทธ ์์ ์์ํ ํ
์คํธ๋ ๋ฒํผ๋ค์ ๊ทธ๋ฅ html ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋ชจ๋ ui ์์๋ฅผ ์คํ์ผ ์ปดํฌ๋ํธ๋ก ์ง์ ํ๊ธฐ๊ฐ ๋๋ฌด ๊ท์ฐฎ์์์๋ค.... ์ฅ๋จ์ ์ด ์์ง๋ง,, ์ค๋ ๋ณต์ตํ๋ ๊ธฐ๋ฅ๋ค์ ๊ผญ ์จ๋ณด๊ณ ์ถ๋ค.
React์์ styled-components๋ฅผ ์ฌ์ฉํ ๋, ๊ธฐ์กด์ ๋ง๋ ์คํ์ผ์ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ํ์ฅํ๊ณ ์ถ์ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์ด๋ด ๋ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์ ์ค ํ๋๊ฐ styled(๊ธฐ์กด ์ปดํฌ๋ํธ) ๋ฌธ๋ฒ์ด๋ค.
โ ๊ธฐ๋ณธ Box ์ปดํฌ๋ํธ ๋ง๋ค๊ธฐ
๋จผ์ , ๊ธฐ๋ณธ์ด ๋๋ ๋ฐ์ค ์ปดํฌ๋ํธ๋ฅผ ํ๋ ๋ง๋ ๋ค.
const Box = styled.div`
background-color: ${(props) => props.bgColor};
width: 100px;
height: 100px;
`;
์ด Box๋ bgColor๋ผ๋ prop์ ๋ฐ์ ๋ฐฐ๊ฒฝ์์ ๋ฐ๊ฟ ์ ์๋ค. ์ด๋ ๊ฒ ํ๋ฉด ์ฌ์ฌ์ฉ์ฑ์ด ํจ์ฌ ๋์์ง๋ค.
โ Box๋ฅผ ํ์ฅํ์ฌ Circle ๋ง๋ค๊ธฐ
Box ์ปดํฌ๋ํธ๋ฅผ ํ์ฅํด์ Circle์ด๋ผ๋ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋ค. styled(Box)๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
const Circle = styled(Box)`
border-radius: 50px;
`;
์ด๋ ๊ฒ ํ๋ฉด Box์ ์คํ์ผ์ ๊ทธ๋๋ก ์ ์งํ๋ฉด์, border-radius ์์ฑ๋ง ์ถ๊ฐ๋ ์๋ก์ด ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค ์ ์๋ค.
โ ์ค์ ์ฌ์ฉ ์์
function App() {
return (
<Father>
<Box bgColor="teal" />
<Circle bgColor="tomato" />
</Father>
);
}
๊ฒฐ๊ณผ ํ๋ฉด:
- Box: ๋ฐฐ๊ฒฝ์์ด teal์ธ ์ ์ฌ๊ฐํ
- Circle: ๋ฐฐ๊ฒฝ์์ด tomato์ด๊ณ , ๋ฅ๊ธ๊ฒ ์ฒ๋ฆฌ๋์ด ์ํ์ด ๋จ
์ถ๊ฐ )
attrs์ as ์์ฑ์ผ๋ก ๋ ์ ์ฐํ๊ฒ ๋ค๋ฃจ๊ธฐ
styled-components๋ฅผ ์ฌ์ฉํ ๋ ๋จ์ํ ์คํ์ผ๋ง๋ฟ๋ง ์๋๋ผ ์์ฑ์ ์ถ๊ฐํ๊ฑฐ๋, ์ปดํฌ๋ํธ์ ํ๊ทธ๋ฅผ ๋์ ์ผ๋ก ๋ฐ๊พธ๊ณ ์ถ์ ๋๊ฐ ์๋ค. ์ด๋ด ๋ ์ ์ฉํ ๊ธฐ๋ฅ์ด ๋ฐ๋ก .attrs()์ as prop์ด๋ค.
โ .attrs()๋ก ๊ธฐ๋ณธ ์์ฑ ์ง์ ํ๊ธฐ
attrs()๋ฅผ ์ฌ์ฉํ๋ฉด HTML ์์ฑ์ ๊ธฐ๋ณธ๊ฐ์ผ๋ก ์ง์ ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด input ์ปดํฌ๋ํธ์ required, minLength ์์ฑ์ ํญ์ ์ ์ฉํ๊ณ ์ถ๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ๋ค. ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ์ฌ๋ฌ๋ฒ ์ฌ์ฉํ ๋, ๋งค๋ฒ HTML ์์ฑ๊ฐ์ ์ง์ ํ์ง ์์๋ ๋์ ํธ๋ฆฌํจ!
const Input = styled.input.attrs({ required: true, minLength: 10, })`
background-color: tomato;
`;
โ .attrs()๋ props๋ก ๋ฐ์์ ๋์ ์ผ๋ก ์ค์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ๋ค!
โ as prop์ผ๋ก ํ๊ทธ ๋ฐ๊พธ๊ธฐ
์ด๋ค ์ปดํฌ๋ํธ๋ฅผ ๋ฒํผ(<button>)์ผ๋ก ๋ง๋ค์์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ ๋งํฌ(<a>)๋ก๋ ์ฌ์ฉํ๊ณ ์ถ์ ๋ as ์์ฑ์ ํ์ฉํ๋ฉด ๋๋ค.
์๋ฅผ ๋ค์ด Btn์ด๋ผ๋ ๋ฒํผ ์ปดํฌ๋ํธ๋ฅผ ์๋์ฒ๋ผ ์ ์ํ๋ค๋ฉด:
const Btn = styled.button`
background-color: tomato;
border: none;
padding: 10px 20px;
color: white;
font-weight: bold;
cursor: pointer;
`;
function App() {
return (
<Father>
<Btn>Log in</Btn>
<Btn as="a" href="/">Log in</Btn>
</Father>
);
}

'๐ค Web > ๐ React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ Styled Components๋ก ๋ผ์ดํธ/๋คํฌ ๋ชจ๋ ์ ํํ๊ธฐ (0) | 2025.03.26 |
---|---|
Styled Components - ์ ๋๋ฉ์ด์ , ์ปดํฌ๋ํธ ์ ํ์, ์ค์ฒฉ ์คํ์ผ๋ง (0) | 2025.03.26 |
๋ฆฌ์กํธ ํด๋๊ตฌ์กฐ์ ์ ์์ด ์์๊น (0) | 2023.02.17 |
๊ฐ๋ฐ์๋๊ตฌ ์ผ๋ฌด์ฅ๊ฒ ์ฐ๊ธฐ (0) | 2023.02.17 |
๋ฐ์ํ ์น์์์ ์ปจํ ์ด๋ ํฌ๊ธฐ (0) | 2023.02.17 |
๋๊ธ