React styled-components 사용법

나나콘·2022년 5월 25일
0

컴포넌트가 많은 경우 스타일링을 하다보면 불편함이 생기는데

  1. class 만들어놓은걸 까먹고 중복해서 또 만들거나

  2. 갑자기 다른 이상한 컴포넌트에 원하지않는 스타일이 적용되거나

  3. CSS 파일이 너무 길어져서 수정이 어렵거나

이런 경우가 있습니다.

그래서 스타일을 바로 입혀서 컴포넌트를 만들어버릴 수도 있는데

styled-components 라는 인기 라이브러리를 설치하여 이용하시면 됩니다.

// 터미널 열어서 
// npm install styled-components --> 설치

import styled from 'styled-components'

styled-components 기본적인 사용법

이 라이브러리를 이용하면 컴포넌트를 만들 때 스타일을 미리 주입해서 만들 수 있습니다.

import styled from 'styled-components';

// 1. <div>를 하나 만들고 싶으면 --> styled.div 사용
// ex) <p> 만드려면 --> styled.p
// 2. 오른쪽에 `` : backtick 기호에 이용해서 css 스타일을 넣을 수 있습니다.
let Box = styled.div` 	
  background : gray;
  padding : 20px;
`;
let YellowBtn = styled.button`
  background : yellow;
  color : black;
  padding : 10px;
`;

function Detail(){
  return (
    <div>
      <Box>
        // yellow 버튼 추가.
        <YellowBtn>노란색버튼</YellowBtn>
      </Box>
    </div>
  )
}


일반 CSS 파일도 오염방지 기능

App.css 파일을 만들어서 App.js에서 import해서 쓴다고 해도

거기 적은 클래스명들은 Detail.js까지 사용가능합니다. (오염됨)

프로젝트 사이즈가 작을 땐 편리하겠지만 사이즈가 커지면 관리하기 힘들어집니다.

styled-components 써도 되지만 그냥 css파일에서도 다른 js 파일에 간섭하지 않는 '모듈화' 기능을 제공하는데
컴포넌트명.module.css
ex) App.js --> App.module.css

이렇게 css 파일을 작명하면 됩니다.
그리고 컴포넌트명.js 파일에서 import 해서 쓰면 그 스타일들은 컴포넌트명.js 파일에만 적용됩니다.


추가 문법 : props로 재활용가능

여러가지 비슷한 UI가 필요한 경우
props 이용하면 기존 컴포넌트를 살짝씩 다르게 이용할 수 있다

import styled from 'styled-components';

// ${ props => props.bg } : styled-components에서의 props 사용법.
// 컴포넌트 사용시 bg라는 props를 입력가능.
let YellowBtn = styled.button`
  background : ${ props => props.bg };
  color : black;
  padding : 10px;
`;

function Detail(){
  return (
    <div>
        <YellowBtn bg="orange">오렌지색 버튼임</YellowBtn>
        <YellowBtn bg="blue">파란색 버튼임</YellowBtn>
    </div>
  )
}

물론 CSS 쓴다고 이게 불가능한건 아닙니다. class 더 만들면 되는 것임


추가 예제

let Btn = styled.button`
    background : ${ props => props.bg };    // bg라는 props를 사용할 수 있습니다. (props로 컴포넌트 재활용)
    color : ${ props => props.bg == 'blue' ? 'white' : 'black' };
    padding : 10px;
`

<Btn bg="yellow">노란색버튼</Btn>
<Btn bg="blue">파란색버튼</Btn>


장점

장점1. CSS 파일 오픈할 필요없이 JS 파일에서 바로 스타일넣을 수 있습니다.

장점2. 여기 적은 스타일이 다른 JS 파일로 오염되지 않습니다. 원래 그냥 CSS파일은 오염됩니다.

장점3. 페이지 로딩시간 단축

왜냐면 저기 적은 스타일은 html 페이지의 <style> 태그에 넣어줘서 그렇습니다. 

단점

단점1. JS 파일이 매우 복잡해집니다.
이 컴포넌트가 styled 인지 아니면 일반 컴포넌트인지 구분도 어려움.

단점2. JS 파일 간 중복 디자인이 많이 필요하면 어쩌죠?
다른 파일에서 스타일 넣은 것들 import 해서 쓰면 됩니다.(css파일 쓰는거랑 차이가 없을듯)

단점3. CSS 담당하는 디자이너가 있다면 협업시 불편할텐데 
그 사람이 styled-components 문법을 모른다면 
그 사람이 CSS로 짠걸 styled-components 문법으로 다시 바꾸거나 그런 작업이 필요하겠군요.
그래서 신기술같은거 도입시엔 언제나 미래를 생각해보아야합니다. 
profile
지식을 기록하고, 경험을 코드로 남겨라.

1개의 댓글

comment-user-thumbnail
2023년 6월 23일

👀

답글 달기