본문 바로가기
개발

효율적인 React 스타일링을 위한 Styled Components 가이드

by hes3518 2024. 11. 17.
728x90

React에서 Styled Components로 효율적인 스타일링 하기

안녕하세요, 여러분! 오늘은 React 애플리케이션에서의 스타일링 문제를 해결하기 위해 Styled Components에 대해 이야기해보려 합니다. 이 기술은 여러분의 코드가 더욱 간결하고 관리하기 쉬워질 것입니다. 그럼, 시작해볼까요?

들어가는 말

React 환경에서 컴포넌트에 스타일을 적용하는 데 있어 인라인 스타일이나 CSS 파일을 불러오는 방식이 있습니다. 하지만 이러한 방법은 여러 가지 불편함을 초래하곤 합니다. 여러분도 경험해 본 적이 있겠지만, 코드가 길어지면 유지보수가 어려워지고 스타일이 충돌하는 문제가 발생할 수 있습니다. 그래서 Styled Components가 등장하였습니다!

기존 스타일링 방법의 한계

인라인 스타일

const General_App = () => {
  return (
    <div style={{ display: "flex" }}>
      <div style={{ backgroundColor: "teal", width: 100, height: 100 }}></div>
      <span style={{ color: "white" }}>Hello, I'm TEXT</span>
      <div style={{ backgroundColor: "tomato", width: 100, height: 100 }}></div>
    </div>
  );
};

인라인 스타일을 사용하면 HTML 태그가 길어지고, 유지보수 측면에서 좋지 않습니다. 또한 공통된 스타일을 적용해야 할 때마다 같은 코드를 반복 작성해야 하기 때문에 비효율적입니다.

CSS 파일 불러오기

.flex-container {
  display: flex;
}

.box-one {
  background-color: teal;
  width: 100px;
  height: 100px;
}

.box-two {
  background-color: tomato;
  width: 100px;
  height: 100px;
}

.text {
  color: white;
}

CSS 파일을 사용하는 방식은 두 개의 파일을 관리해야 하고, 특정 컴포넌트를 수정하기 위해 className을 확인하고 CSS 파일을 찾아가야 하므로 불편합니다. 게다가 식별자 이름이 중복되면 스타일이 충돌할 위험도 있습니다.

Styled Components의 등장

Styled Components를 사용하면 컴포넌트와 해당 스타일을 한 곳에서 관리할 수 있어 코드 관리가 훨씬 용이해집니다. 이제 Styled Components를 사용하는 방법을 살펴보겠습니다.

기본 사용법

import styled from 'styled-components';

const Container = styled.div`
  background-color: white;
`;

const Styled_App = () => {
  return <Container />;
};

위의 코드에서 styled.div를 사용해 스타일을 쉽게 지정할 수 있습니다. 또한 Styled Component는 컴포넌트이기 때문에 대문자로 시작해야 한다는 점도 잊지 마세요!

외부 속성 받기

Styled Component는 외부로부터 값을 전달받아, 값에 따라 스타일을 변경할 수 있습니다. 예를 들어 배경 색상을 다르게 지정할 수 있습니다.

const Box = styled.div`
  background-color: ${(props) => props.bgColor};
  width: 100px;
  height: 100px;
`;

const App = () => {
  return (
    <div>
      <Box bgColor="black"></Box>
      <Box bgColor="green"></Box>
    </div>
  );
};

위의 예에서 Box 컴포넌트에 bgColor 속성을 전달하여 각기 다른 배경색을 갖는 박스를 만들었습니다. Styled Components는 props를 쉽게 활용할 수 있도록 도와줍니다.

Styled Components 확장

이제 기존 스타일을 상속받아 새로운 컴포넌트를 만드는 방법도 알아보겠습니다.

const Parent = styled.div`
  display: flex;
`;

const ChildOne = styled(Parent)`
  flex-direction: row;
`;

const ChildTwo = styled(Parent)`
  flex-direction: column;
`;

const App = () => {
  return (
    <Parent>
      <ChildOne>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
      </ChildOne>
      <ChildTwo>
        <span>1</span>
        <span>2</span>
        <span>3</span>
        <span>4</span>
      </ChildTwo>
    </Parent>
  );
};

위의 코드에서는 Parent 컴포넌트의 스타일을 상속받아 ChildOneChildTwo에서 각각 다른 flex-direction을 지정했습니다. 이렇게 하면 코드가 직관적이면서 재사용성이 증가합니다.

애니메이션 추가하기

Styled Components에 애니메이션을 추가할 수도 있습니다. keyframes를 통해 쉽게 애니메이션 효과를 적용할 수 있습니다.

import styled, { keyframes } from "styled-components";

const rotationAnimation = keyframes`
  0% {
    border-radius: 0px;
    transform: rotate(0deg);
  }
  50% {
    border-radius: 100px;
    transform: rotate(360deg);
  }
  100% {
    border-radius: 0px;
    transform: rotate(0deg);
  }
`;

const Square = styled.div`
  width: 200px;
  height: 200px;
  background-color: tomato;
  display: flex;
  justify-content: center;
  align-items: center;
  animation: ${rotationAnimation} 1s linear infinite;
`;

const Animation = () => {
  return (
    <div>
      <Square />
    </div>
  );
};

여기서 Square 컴포넌트에 회전 애니메이션을 적용하였습니다. keyframes를 사용하여 애니메이션 효과를 간단하게 정의할 수 있습니다.

마무리

이번 포스트에서는 React 환경에서 Styled Components를 활용하여 효율적인 스타일링을 구현하는 방법에 대해 알아보았습니다. 앞으로의 프로젝트에 이 지식이 크게 도움이 되기를 바랍니다. 질문이나 공유하고 싶은 경험이 있다면 댓글로 남겨 주세요!

여러분 모두 멋진 프로그래밍 경험을 하시길 바랍니다. 다음 포스트에서 만나요!

728x90