본문 바로가기
부트캠프교육중/react

Styled Component

by 뭉지야 2023. 2. 21.
728x90

# Styled Components
-기능적(functional) 혹은 상태를 가진 컴포넌트들로부터 UI를 완전히 분리해 사용할수있는 아주 단순한 패턴을 제공한다.
-HTML + JS + CSS까지 묶어서 하나의 JS파일 안에서 컴포넌트 단위로 개발할수있게 된다. 그게 CSS in JS 라이브러리이고. 그중에서 현재 가장 인기있는 라이브러리가 Styled Components이다.
즉, Styled Component는 CSS-in-JS라이브러리 중 하나이다.
-CSS를 컴포넌트화 시킴

 

# 사용법

//설치하기
npm install --save styled-components

//styled-components를 사용할 파일로 불러와라.
import styled from "styled-components"


//package.json에 다음 코드를 추가하도록 권장한다. 
//추가하면 styled components가 설치되어 발생하는 문제를 줄여준다.
{
  "resolutions": {
  "styled-components": "^5"
}}

<Styled Components 문법>
1. 컴포넌트 만들기

-컴포넌트를 선언한후 styled.태그종류를 할당하고 백틱안에 css작성하던대로 스타일속성을 작성해주면 된다.
이렇게 만든 컴포넌트를 react컴포넌트를 사용하듯 리턴문안에 작성해주면 스타일이 적용된 컴포넌트가  렌더되는 것을 확인할수있다.

import styled from "styled-components";

const BlueButton = styled.button`
  background-color: blue;
  color: white;
`;

export default function App() {
  return <BlueButton>Blue Button</BlueButton>;
}

 

2.컴포넌트를 재활용해서 새로운 컴포넌트 만들기

-스타일 속성을 추가하기

-이미 만들어진 컴포넌트를 재활용해서 새로운 컴포넌트를 만드는 거다.
-컴포넌트를 선언하고 styled()에 재활용할 컴포넌트를 전달해준 다음, 추가하고 싶은 스타일 속성을 작성해주면 된다.
-재활용한 컴포넌트를 또 재활용할수도 있다.

import styled from "styled-components";

const BlueButton = styled.button`
  background-color: blue;
  color: white;
`;

const BigBlueButton = styled(BlueButton)`
  padding: 10px;
  margin-top: 10px;
`;

const BigRedButton = styled(BigBlueButton)`
  background-color: red;
`;

export default function App() {
  return (
    <>
      <BlueButton>Blue Button</BlueButton>
      <br />
      <BigBlueButton>Big Blue Button</BigBlueButton>
      <br />
      <BigRedButton>Big Red Button</BigRedButton>
    </>
  );
}

 

3.props활용하기

- styled Component로 만든 컴포넌트도 react컴포넌트처럼 props를 내려줄수있다. 내려준 props값에 따라서 컴포넌트를 렌더링하는 것도 가능하다.

1) props로 조건부 렌더링하기

const Button = styled.button`
background: ${(props)=> props.skyblue ? "skyblue" : "white"} 
`;



<Button skyblue>Button1</Button>
<Button>Button2</Button>

-삼항연산자를 활용해 <button> 컴포넌트에 skyblue라는 props가 있는지 확인하고, 있으면 배경색으로 skyblue를, 없으면 white를 지정해주는 코드이다.
-button1의 경우는 skyblue라는 props가 있어 배경색이 skyblue로 지정될거고,
-button2의 경우는 props가 아예없어 배경색이 white로 지정될거다.

 

2) props 값으로 렌더링하기

const Button = styled.button`
background: ${(props)=> props.color ? props.color: "white"}
`;

<Button>Button1</Button>
<Button color="orange">Button2</Button>
<Button color="tomato">Button3</Button>
const Button = styled.button`
background: ${(props)=> props.color || "white"}
`;

<Button>Button1</Button>
<Button color="orange">Button2</Button>
<Button color="tomato">Button3</Button>

-꼭 삼항연산자 안써도된다.

-color라는 이름으로 받은 props의 값으로 배경색이 지정된다.

 

4.전역 스타일 설정하기

import { createGlobalStyle } from "styled-components";

const GlobalStyle = createGlobalStyle`
button {
padding : 5px;
margin : 2px;
border-radius : 5px;
}
`

//만들어진 GlobalStyle컴포넌트를 최상위 컴포넌트에서 사용해주면된다.
function App() {
return (
<>
<GlobalStyle />
<Button>전역 스타일 적용하기</Button>
</>
);
}

실습하기 코드(내가공부할때 보려고 올리는거임. 퍼가지마셈.)

import styled from "styled-components";
import { createGlobalStyle } from "styled-components";

const GlobalStyle = createGlobalStyle`
button{
  margin: 0.5rem;
}`;

const Button = styled.button`
  padding: 1rem;
  font-size: 2rem;
  background: powderblue;
  border-radius: 1rem;
  transition: 0.5s;
  &:hover {
    background: cornflowerblue;
    color: white;
    transition: 0.5s;
  }
`;

export default function App() {
  return (
    <>
      <GlobalStyle />
      <Button>Practice!</Button>
    </>
  );
}

 

728x90

'부트캠프교육중 > react' 카테고리의 다른 글

상태관리  (0) 2023.02.23
Storybook  (0) 2023.02.22
CDD (Component Driven Development)  (0) 2023.02.20
useNavigate  (0) 2023.02.19
batching  (0) 2023.02.03