Frontend ๐Ÿ“š/React

[์ฝ”๋”ฉ์• ํ”Œ] ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ Part3 - Styled Components

leejaejae 2023. 10. 17. 17:54

โœ๏ธ styled-components 

โœ๏ธ ์„ค์น˜
- ํ„ฐ๋ฏธ๋„ ์—ด์–ด์„œ npm install styled-components
- ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ์€ ์ปดํฌ๋„ŒํŠธ ๋งจ์œ„์— ์•„๋ž˜์ฒ˜๋Ÿผ import

import styled from 'styled-components'


โœ๏ธ styled-components ๊ธฐ๋ณธ์ ์ธ ์‚ฌ์šฉ๋ฒ•
- ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ด์šฉํ•˜๋ฉด ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค ๋•Œ ์Šคํƒ€์ผ์„ ๋ฏธ๋ฆฌ ์ฃผ์ž…ํ•ด์„œ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

// padding : 20px์ธ div๋ฐ•์Šค

import styled from 'styled-components';

let Box = styled.div`
  padding : 20px;
  color : grey
`;
let YellowBtn = styled.button`
  background : yellow;
  color : black;
  padding : 10px;
`;

function Detail(){
  return (
    <div>
      <Box>
        <YellowBtn>๋ฒ„ํŠผ์ž„</YellowBtn>
      </Box>
    </div>
  )
}

1. <div>๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ค๊ณ  ์‹ถ์œผ๋ฉด ์ €๋ ‡๊ฒŒ styled.div ๋ผ๋Š” ๊ฑธ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค. <p> ๋งŒ๋“ค๋ ค๋ฉด styled.p ์ด๋Ÿฐ ์‹
2. ์˜ค๋ฅธ์ชฝ์— `` backtick ๊ธฐํ˜ธ๋ฅผ ์ด์šฉํ•ด์„œ CSS ์Šคํƒ€์ผ์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
3. ๊ทธ๋Ÿผ ๊ทธ ์ž๋ฆฌ์— ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚จ๊ฒจ์ฃผ๋Š”๋ฐ ๋ณ€์ˆ˜์— ์ €์žฅํ•ด์„œ ์“ฐ๋ฉด ๋œ๋‹ค.

โœ๏ธ ์žฅ์ 
์žฅ์ 1. CSS ํŒŒ์ผ ์˜คํ”ˆํ•  ํ•„์š”์—†์ด JS ํŒŒ์ผ์—์„œ ๋ฐ”๋กœ ์Šคํƒ€์ผ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค.
์žฅ์ 2. ์—ฌ๊ธฐ ์ ์€ ์Šคํƒ€์ผ์ด ๋‹ค๋ฅธ JS ํŒŒ์ผ๋กœ ์˜ค์—ผ๋˜์ง€ ์•Š๋Š”๋‹ค. ์›๋ž˜ ๊ทธ๋ƒฅ CSSํŒŒ์ผ์€ ์˜ค์—ผ๋œ๋‹ค.
์žฅ์ 3. ์ €๊ธฐ ์ ์€ ์Šคํƒ€์ผ์€ html ํŽ˜์ด์ง€์˜ <style> ํƒœ๊ทธ์— ๋„ฃ์–ด์ค˜์„œ ํŽ˜์ด์ง€ ๋กœ๋”ฉ์‹œ๊ฐ„์ด ๋‹จ์ถ•๋œ๋‹ค.

! ์‹ค์€ ์ผ๋ฐ˜ CSS ํŒŒ์ผ๋„ ์˜ค์—ผ๋ฐฉ์ง€ ๊ฐ€๋Šฅ
- App.css ํŒŒ์ผ์„ ๋งŒ๋“ค์–ด์„œ App.js์—์„œ importํ•ด์„œ ์“ด๋‹ค๊ณ  ํ•ด๋„ ๊ฑฐ๊ธฐ ์ ์€ ํด๋ž˜์Šค๋ช…๋“ค์€ Detail.js๊นŒ์ง€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค(์˜ค์—ผ๋˜๋Š” ๊ฑฐ). ํ”„๋กœ์ ํŠธ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘์„ ๋• ํŽธ๋ฆฌํ•˜๊ฒ ์ง€๋งŒ ์‚ฌ์ด์ฆˆ๊ฐ€ ์ปค์ง€๋ฉด ๊ด€๋ฆฌํ•˜๊ธฐ ํž˜๋“ค์–ด์ง.
- ๊ทธ๋Ÿด ๋• styled-components ์จ๋„ ๋˜์ง€๋งŒ ๊ทธ๋ƒฅ CSSํŒŒ์ผ์—์„œ๋„ ๋‹ค๋ฅธ JS ํŒŒ์ผ์— ๊ฐ„์„ญํ•˜์ง€ ์•Š๋Š” '๋ชจ๋“ˆํ™”' ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ “์ปดํฌ๋„ŒํŠธ๋ช….module.css” ์ด๋ ‡๊ฒŒ CSS ํŒŒ์ผ์„ ์ž‘๋ช…ํ•˜๋ฉด ๋œ๋‹ค.
- ๊ทธ๋ฆฌ๊ณ  ์ปดํฌ๋„ŒํŠธ๋ช….js ํŒŒ์ผ์—์„œ import ํ•ด์„œ ์“ฐ๋ฉด ๊ทธ ์Šคํƒ€์ผ๋“ค์€ ์ปดํฌ๋„ŒํŠธ๋ช….js ํŒŒ์ผ์—๋งŒ ์ ์šฉ๋จ.

! ์ถ”๊ฐ€ ๋ฌธ๋ฒ•: props๋กœ ์žฌํ™œ์šฉ ๊ฐ€๋Šฅ

import styled from 'styled-components';

let YellowBtn = styled.button`
  background : ${ props => props.bg };  // styled-components ์—์„œ์˜ props ๋šซ๋Š” ๋ฌธ๋ฒ•
  color : black;
  padding : 10px;
`;

function Detail(){
  return (
    <div>
        <YellowBtn bg="orange">์˜ค๋ Œ์ง€์ƒ‰ ๋ฒ„ํŠผ์ž„</YellowBtn>
        <YellowBtn bg="blue">ํŒŒ๋ž€์ƒ‰ ๋ฒ„ํŠผ์ž„</YellowBtn>
    </div>
  )
}

- bg ๋ถ€๋ถ„์— ์ž์œ ๋กญ๊ฒŒ ์ž‘๋ช…ํ•˜๋ฉด ๋˜๊ณ  ์ด์ œ ์ปดํฌ๋„ŒํŠธ ์“ธ ๋•Œ bg๋ผ๋Š” props ์ž…๋ ฅ ๊ฐ€๋Šฅ

โœ๏ธ ๋‹จ์ 
๋‹จ์ 1. JS ํŒŒ์ผ์ด ๋งค์šฐ ๋ณต์žกํ•ด์ง„๋‹ค.
๋‹จ์ 2. JS ํŒŒ์ผ ๊ฐ„ ์ค‘๋ณต ๋””์ž์ธ์ด ๋งŽ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค๋ฅธ ํŒŒ์ผ์—์„œ ์Šคํƒ€์ผ ๋„ฃ์€ ๊ฒƒ๋“ค์„ import ํ•ด์™€์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๋Š”๋ฐ ๊ทธ๋Ÿผ CSS ํŒŒ์ผ์„ ์“ฐ๋Š” ๊ฒƒ๊ณผ ์ฐจ์ด๊ฐ€ ์—†๋‹ค.
๋‹จ์ 3. CSS ๋‹ด๋‹นํ•˜๋Š” ๋””์ž์ด๋„ˆ๊ฐ€ ์žˆ๋‹ค๋ฉด ํ˜‘์—…์‹œ ๋ถˆํŽธํ•˜๋‹ค.


๋ณธ ํฌ์ŠคํŒ…์€ << React ๋ฆฌ์•กํŠธ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‡ผํ•‘๋ชฐ ํ”„๋กœ์ ํŠธ๊นŒ์ง€! >> ๊ฐ•์˜๋ฅผ ์ฐธ๊ณ ํ•ฉ๋‹ˆ๋‹ค.