React styled-component

김규빈·2021년 1월 3일
0
post-custom-banner

CSS in JS?
먼저 CSS in JS의 개념을 짚고 넘어가겠습니다. CSS in JS는 스타일 정의를 CSS 파일이 아닌 JavaScript로 작성된 컴포넌트에 바로 삽입하는 스타일 기법입니다.

기존에 웹사이트를 개발할 때는 HTML과 CSS, JavaScript는 각자 별도의 파일에 두는 것이 best practice로 여겨졌었습니다. 하지만 React나 Vue, Angular와 같은 모던 자바스크립트 라이브러리가 인가를 끌면서 웹개발의 패러다임이 바뀌고 있습니다. 최근에는 웹 애플리케이션을 여러 개의 재활용이 가능한 빌딩 블록으로 분리하여 개발하는 컴포넌트 기반 개발 방법이 주류가 되고 있습니다.

따라서, 웹페이지를 HTML, CSS, JavaScript 3개로 분리하는 것이 아니라, 여러 개의 컴포넌트로 분리하고, 각 컴포넌트에 HTML, CSS, JavaScript을 몽땅 때려 박는 패턴이 많이 사용되고 있습니다. React는 JSX를 사용해서 이미 JavaScript가 HTML을 포함하고 있는 형태를 취하고 있는데, 여기에 CSS-in-JS 라이브러리만 사용하면 CSS도 손쉽게 JavaScript에 삽입할 수 있습니다

🤔 SASS만으로도 행복했는데... Why?

언제나 잊지 말아야 할 건 기술은 언제나 문제를 해결하기 위해 등장했다는 사실입니다.

단, 마주한 문제를 더욱 멋지게 풀어낼 수 있는 방법이 존재한다면 열린 마음으로 도입을 고려해봐야 합니다 :)

SASS는 기존 Pure CSS의 많은 부분을 개선했습니다. 그러나 여전히 해결되지 않는 고질적인 문제점 또한 여전히 존재합니다.

  • CSS 클래스 명에 대한 고민은 여전합니다.
    • ex. BEM (.block__element--modifier, button button--state-success)
  • 정해진 가이드가 없으면 구조가 복잡해집니다.
  • 방대한 스타일 정보로 인한 스크롤 지옥도 여전합니다.
  • 여전히 CSS 클래스로 조건부 스타일링을 하고 있습니다.
  • CSS 클래스로 조건부 스타일링을 하더라도 동적인 변화를 표현하기에 한계가 있습니다.
    - ex. 1초에 px 값을 1씩 증가 → Inline 스타일에 의존
    가변 스타일링 1
    Styled Components는 React 컴포넌트에 넘어온 props에 따라 다른 스타일을 적용하는 기능을 제공합니다. Tagged Template Literals을 사용하기 때문에 함수도 문자열 안에 포함시킬 수 있다는 점을 이용하는데요.

예를 들어, 버튼의 글자색과 배경색을 props따라 바뀌도록 위에서 작성한 예제 코드를 변경해보겠습니다. 자바스크립트의 || 연산자를 사용하여 props이 넘어오지 않은 경우, 기존에 정의한 기본 색상이 그대로 유지되도록 합니다.

가변 스타일링 2
prop에 따라 바꾸고 싶은 CSS 속성이 위와 같이 하나가 아니라 여러 개일 경우가 있습니다. 이럴 경우, Styled Components에서 제공하는 css 함수를 사용해서 여러 개의 CSS 속성을 묶어서 정의할 수 있습니다.

예를 들어, primary prop이 넘어온 경우, 글자색을 흰색, 배경색과 경계색은 남색으로 변경하고 싶다면 다음과 같이 예제 코드를 수정할 수 있습니다. 이번에는 자바스크립트의 && 연산자를 사용해서, primary prop이 존재하는 경우에만 css로 정의된 스타일이 적용되도록 하였습니다.

profile
FrontEnd Developer
post-custom-banner

0개의 댓글