์ตœ๋Œ€ 1 ๋ถ„ ์†Œ์š”

1๏ธโƒฃ Styled Components๋ž€?

Styled Components๋Š” CSS-in-JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.
React ์ปดํฌ๋„ŒํŠธ ๋‚ด๋ถ€์— ์ง์ ‘ ์Šคํƒ€์ผ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์™€์ค๋‹ˆ๋‹ค.

๐Ÿ” ํ•ต์‹ฌ ํŠน์ง•

  • โœ… ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์Šคํƒ€์ผ๋ง
  • โœ… ๊ณ ์œ ํ•œ ํด๋ž˜์Šค ๋„ค์ž„ ์ž๋™ ์ƒ์„ฑ (ํ•ด์‹œ ๊ธฐ๋ฐ˜)
  • โœ… ์Šคํƒ€์ผ ์ถฉ๋Œ ์—†์Œ
  • โœ… JavaScript์˜ ๋™์  ๊ธฐ๋Šฅ 100% ํ™œ์šฉ

2๏ธโƒฃ ์„ค์น˜ ๋ฐฉ๋ฒ•

npm install --save styled-components

๋˜๋Š” Yarn ์‚ฌ์šฉ ์‹œ

yarn add styled-components

3๏ธโƒฃ ์ฃผ์š” ์žฅ์ 

๐Ÿ’ก 1. ์ปดํฌ๋„ŒํŠธ ์Šคํƒ€์ผ ์บก์Аํ™”

  • ์Šคํƒ€์ผ๊ณผ UI ๋กœ์ง์ด ๊ฐ™์€ ํŒŒ์ผ์— ์žˆ์–ด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฌ์›€

๐Ÿ’ก 2. ํด๋ž˜์Šค ๋„ค์ž„ ์ถฉ๋Œ ๋ฐฉ์ง€

  • ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋œ ํ•ด์‹œ class ๋•๋ถ„์— ์ „์—ญ ์Šคํƒ€์ผ ๊ฐ„์„ญ ์—†์Œ

๐Ÿ’ก 3. ๋™์  ์Šคํƒ€์ผ๋ง ์ง€์›

  • props๋ฅผ ํ™œ์šฉํ•œ ์กฐ๊ฑด๋ถ€ ์Šคํƒ€์ผ ์ ์šฉ์ด ๊ฐ€๋Šฅ
background: ${props => props.primary ? "blue" : "gray"};

๐Ÿ’ก 4. ์™„์ „ํ•œ JavaScript ์‚ฌ์šฉ

  • if ๋ฌธ, ๋ณ€์ˆ˜, ๊ณ„์‚ฐ ๋“ฑ ์ž์œ ๋กญ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

๐Ÿ’ก 5. TypeScript์™€ ํ˜ธํ™˜๊ฐ€๋Šฅ

  • ํƒ€์ž… ์•ˆ์ •์„ฑ๊ณผ ์ž๋™์™„์„ฑ ์ œ๊ณต

4๏ธโƒฃ ๊ธฐ๋ณธ ์‚ฌ์šฉ ์˜ˆ์ œ

import styled from 'styled-components';

const Button = styled.button\`
  background: \${props => props.primary ? "blue" : "gray"};
  color: white;
  font-size: 1rem;
  padding: 0.6em 1.2em;
  border: none;
  border-radius: 6px;
  cursor: pointer;
  transition: all 0.2s;

  &:hover {
    opacity: 0.85;
  }
\`;

export default function App() {
  return (
    <>
      <Button primary>Primary Button</Button>
      <Button>Default Button</Button>
    </>
  );
}

ํƒœ๊ทธ:

์นดํ…Œ๊ณ ๋ฆฌ:

์—…๋ฐ์ดํŠธ: