본문 바로가기
React

React에서 styled-components 사용법

by 굿센스굿 2024. 12. 11.
반응형

 

React 애플리케이션을 개발하면서 스타일링은 중요한 부분을 차지합니다. 기존의 CSS 파일을 사용하는 방법 외에도, CSS-in-JS 라이브러리를 사용하여 컴포넌트 단위로 스타일을 관리하는 방법이 점점 인기를 끌고 있습니다. 그 중에서도 styled-components는 React 개발자 사이에서 많이 사용되는 라이브러리입니다. 이번 글에서는 styled-components를 사용하여 React 컴포넌트를 스타일링하는 방법을 알아보겠습니다.

1. styled-components 소개

styled-components는 JavaScript 파일 안에서 CSS를 작성할 수 있게 해주는 라이브러리입니다. 이를 통해 스타일을 컴포넌트에 직접 결합할 수 있으며, 동적인 스타일링도 쉽게 구현할 수 있습니다. styled-components를 사용하면 다음과 같은 이점이 있습니다:

  • CSS의 전역 오염 방지: 스타일이 컴포넌트 단위로 적용되므로, 전역 네임스페이스를 오염시키지 않습니다.
  • 동적 스타일링: JavaScript 변수와 함수를 사용하여 조건부 스타일링이 가능합니다.
  • 가독성 향상: 스타일과 컴포넌트 로직이 하나의 파일에 있어 가독성이 좋아집니다.

2. styled-components 설치

먼저 styled-components 라이브러리를 설치해야 합니다. npm 또는 yarn을 사용하여 설치할 수 있습니다.

npm install styled-components

또는

yarn add styled-components

3. 기본 사용법

styled-components를 사용하여 스타일을 정의하고, 이를 컴포넌트로 사용할 수 있습니다. 다음은 기본적인 사용 예제입니다.

import React from 'react';
import styled from 'styled-components';

// 스타일이 적용된 버튼 컴포넌트 정의
const StyledButton = styled.button`
  background-color: #4CAF50;
  border: none;
  color: white;
  padding: 15px 32px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 16px;
  margin: 4px 2px;
  cursor: pointer;
  border-radius: 4px;

  &:hover {
    background-color: #45a049;
  }
`;

function App() {
  return (
    <div>
      <StyledButton>Click Me</StyledButton>
    </div>
  );
}

export default App;

위 예제에서 StyledButton이라는 스타일이 적용된 버튼 컴포넌트를 정의했습니다. CSS 코드를 JavaScript 안에 작성하고, 이를 styled.button이라는 함수 호출로 감싸주면 됩니다. 이렇게 정의된 StyledButton 컴포넌트는 일반 React 컴포넌트처럼 사용할 수 있습니다.

4. props를 사용한 동적 스타일링

styled-components의 강력한 기능 중 하나는 props를 사용하여 동적 스타일링을 적용할 수 있다는 점입니다. 다음은 props를 사용한 동적 스타일링 예제입니다.

import React from 'react';
import styled from 'styled-components';

// props를 사용하여 동적 스타일링 적용
const StyledButton = styled.button`
  background-color: ${props => props.primary ? '#4CAF50' : 'white'};
  color: ${props => props.primary ? 'white' : '#4CAF50'};
  border: 2px solid #4CAF50;
  padding: 10px 24px;
  cursor: pointer;
  border-radius: 4px;

  &:hover {
    background-color: ${props => props.primary ? '#45a049' : '#f1f1f1'};
  }
`;

function App() {
  return (
    <div>
      <StyledButton primary>Primary Button</StyledButton>
      <StyledButton>Secondary Button</StyledButton>
    </div>
  );
}

export default App;

위 예제에서는 primary라는 props를 사용하여 버튼의 배경색과 글자색을 동적으로 변경했습니다. props.primary의 값에 따라 다른 스타일을 적용할 수 있습니다.

5. 스타일 확장

styled-components를 사용하면 기존 스타일을 확장하여 새로운 스타일을 정의할 수 있습니다. 이를 통해 코드 재사용성을 높일 수 있습니다.

import React from 'react';
import styled from 'styled-components';

const Button = styled.button`
  padding: 10px 24px;
  border-radius: 4px;
  cursor: pointer;
  font-size: 16px;
`;

// Button 스타일을 확장하여 새로운 스타일 정의
const PrimaryButton = styled(Button)`
  background-color: #4CAF50;
  color: white;
  border: none;

  &:hover {
    background-color: #45a049;
  }
`;

const SecondaryButton = styled(Button)`
  background-color: white;
  color: #4CAF50;
  border: 2px solid #4CAF50;

  &:hover {
    background-color: #f1f1f1;
  }
`;

function App() {
  return (
    <div>
      <PrimaryButton>Primary Button</PrimaryButton>
      <SecondaryButton>Secondary Button</SecondaryButton>
    </div>
  );
}

export default App;

위 예제에서는 Button 컴포넌트를 정의하고, 이를 확장하여 PrimaryButton과 SecondaryButton을 생성했습니다. 이렇게 하면 공통 스타일을 재사용할 수 있어 코드가 더 깔끔해집니다.

6. 테마 적용

styled-components는 테마를 사용하여 스타일을 일관되게 적용할 수 있습니다. 테마를 사용하면 애플리케이션 전체에 공통된 스타일을 쉽게 적용하고 변경할 수 있습니다.

import React from 'react';
import styled, { ThemeProvider } from 'styled-components';

const theme = {
  primaryColor: '#4CAF50',
  secondaryColor: '#f1f1f1',
  textColor: 'white'
};

const StyledButton = styled.button`
  background-color: ${props => props.theme.primaryColor};
  color: ${props => props.theme.textColor};
  padding: 10px 24px;
  border: none;
  border-radius: 4px;
  cursor: pointer;

  &:hover {
    background-color: ${props => props.theme.secondaryColor};
  }
`;

function App() {
  return (
    <ThemeProvider theme={theme}>
      <div>
        <StyledButton>Click Me</StyledButton>
      </div>
    </ThemeProvider>
  );
}

export default App;

위 예제에서는 ThemeProvider를 사용하여 테마를 정의하고, StyledButton 컴포넌트에서 테마 값을 참조하여 스타일을 적용했습니다. 이렇게 하면 테마를 변경할 때 테마 객체만 수정하면 되므로 유지보수가 용이해집니다.

7. 애니메이션 적용

styled-components를 사용하여 CSS 애니메이션을 적용할 수도 있습니다. keyframes를 사용하여 애니메이션을 정의하고, 이를 컴포넌트에 적용할 수 있습니다.

import React from 'react';
import styled, { keyframes } from 'styled-components';

// 애니메이션 정의
const fadeIn = keyframes`
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
`;

// 애니메이션 적용된 컴포넌트 정의
const AnimatedButton = styled.button`
  animation: ${fadeIn} 2s ease-in-out;
  background-color: #4CAF50;
  color: white;
  padding: 10px 24px;
  border: none;
  border-radius: 4px;
  cursor: pointer;

  &:hover {
    background-color: #45a049;
  }
`;

function App() {
  return (
    <div>
      <AnimatedButton>Click Me</AnimatedButton>
    </div>
  );
}

export default App;

위 예제에서는 keyframes를 사용하여 fadeIn 애니메이션을 정의하고, AnimatedButton 컴포넌트에 이를 적용했습니다. 버튼이 렌더링될 때 페이드 인 효과가 적용됩니다.

결론

styled-components를 사용하면 React 애플리케이션에서 컴포넌트 단위로 스타일을 관리할 수 있어 유지보수성과 재사용성이 높아집니다. 기본적인 사용법부터 동적 스타일링, 스타일 확장, 테마 적용, 애니메이션 적용까지 다양한 기능을 활용하여 효율적으로 스타일링할 수 있습니다. styled-components를 통해 보다 체계적이고 일관성 있는 스타일링을 적용해 보세요.

반응형

'React' 카테고리의 다른 글

React에서 글로벌 스타일 적용하기  (0) 2024.12.11
React에서 CSS 모듈 사용하기  (0) 2024.12.11
React에서 Form 상태 관리하기  (0) 2024.12.11
Redux의 기본 개념 이해하기  (0) 2024.12.11
Redux Toolkit 사용법  (0) 2024.12.11