Styled Component์—์„œ ์ปดํฌ๋„ŒํŠธ ํ™•์žฅํ•˜๊ธฐ

    ์˜›๋‚ ์— ๋ฆฌ์•กํŠธ ์ฒ˜์Œ ์ตํž๋•Œ ๋‹ค ๊ณต๋ถ€ํ–ˆ๋˜ ๊ฒƒ ๊ฐ™์€๋ฐ, ํ”„๋กœ์ ํŠธ๋“ค์„ ํ•˜๋‹ค๋ณด๋‹ˆ ๋น„์Šทํ•œ ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์€๋ฐ ๋ฌด์‹œํ•˜๊ณ  ๊ณ„์† ํ•˜๋‹ค๊ฐ€ .. '์•„ ์˜›๋‚ ์— ์ด๊ฑฐ ๊ณต๋ถ€ํ–ˆ์—ˆ๋Š”๋ฐ .. ' ์‹ถ์–ด์„œ ์ •๋ฆฌํ•˜๊ฒŒ๋๋‹ค. 

     

    ์ผ๋‹จ ๊ทธ ์ „์— 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; 
    `;
     
    as="a"๋ฅผ ์‚ฌ์šฉํ•ด์„œ <a> ํƒœ๊ทธ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
    function App() { 
    	return ( 
        	<Father> 
            	<Btn>Log in</Btn> 
                <Btn as="a" href="/">Log in</Btn> 
            </Father> 
        ); 
    }

     

     

     

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€