옛날에 리액트 처음 익힐때 다 공부했던 것 같은데, 프로젝트들을 하다보니 비슷한 컴포넌트를 생성하는 경우가 많은데 무시하고 계속 하다가 .. '아 옛날에 이거 공부했었는데 .. ' 싶어서 정리하게됐다.
일단 그 전에 styled component 를 쓰는 이유는
기존에 div를 만들고 className 이나 style을 부여하는 식이었지만,
대신 styled를 임포트 해서 우리가 사용할 html 에서 사용하고 싶은 태그를 지정하고, 백틱 안에 css코드를 적어준다. -> 컴포넌트
이렇게 하게 되면 스타일링 된 컴포넌트를 사용함으로써, 컴포넌트 함수 안에 스타일을 적을 필요가 없고, 가독성이 좋아진다.
나는 큼직한 or 많이 사용할만한 컴포넌트들은 스타일 컴포넌트로 지정하고, 그 안의 자잘한 텍스트나 버튼들은 그냥 html 태그를 사용했는데, 모든 ui 요소를 스타일 컴포넌트로 지정하기가 너무 귀찮아서였다.... 장단점이 있지만,, 오늘 복습했던 기능들은 꼭 써보고 싶다.
React에서 styled-components를 사용할 때, 기존에 만든 스타일을 재사용하거나 확장하고 싶은 경우가 많다.
이럴 때 사용할 수 있는 방식 중 하나가 styled(기존 컴포넌트) 문법이다.
✅ 기본 Box 컴포넌트 만들기
먼저, 기본이 되는 박스 컴포넌트를 하나 만든다.
const Box = styled.div`
background-color: ${(props) => props.bgColor};
width: 100px;
height: 100px;
`;
이 Box는 bgColor라는 prop을 받아 배경색을 바꿀 수 있다. 이렇게 하면 재사용성이 훨씬 높아진다.
✅ Box를 확장하여 Circle 만들기
Box 컴포넌트를 확장해서 Circle이라는 컴포넌트를 만들 수 있다. styled(Box)를 이용하면 된다.
const Circle = styled(Box)`
border-radius: 50px;
`;
이렇게 하면 Box의 스타일은 그대로 유지하면서, border-radius 속성만 추가된 새로운 컴포넌트를 만들 수 있다.
✅ 실제 사용 예시
function App() {
return (
<Father>
<Box bgColor="teal" />
<Circle bgColor="tomato" />
</Father>
);
}
결과 화면:
- Box: 배경색이 teal인 정사각형
- Circle: 배경색이 tomato이고, 둥글게 처리되어 원형이 됨

추가 )
attrs와 as 속성으로 더 유연하게 다루기
styled-components를 사용할 때 단순히 스타일링뿐만 아니라 속성을 추가하거나, 컴포넌트의 태그를 동적으로 바꾸고 싶을 때가 있다. 이럴 때 유용한 기능이 바로 .attrs()와 as prop이다.
✅ .attrs()로 기본 속성 지정하기
attrs()를 사용하면 HTML 속성을 기본값으로 지정할 수 있다. 예를 들어 input 컴포넌트에 required, minLength 속성을 항상 적용하고 싶다면 다음과 같이 작성한다. 같은 컴포넌트를 여러번 사용할 때, 매번 HTML 속성값을 지정하지 않아도 되서 편리함!
const Input = styled.input.attrs({ required: true, minLength: 10, })`
background-color: tomato;
`;
✅ .attrs()는 props로 받아서 동적으로 설정하는 것도 가능하다!
✅ as prop으로 태그 바꾸기
어떤 컴포넌트를 버튼(<button>)으로 만들었지만, 경우에 따라 링크(<a>)로도 사용하고 싶을 때 as 속성을 활용하면 된다.
예를 들어 Btn이라는 버튼 컴포넌트를 아래처럼 정의했다면:
const Btn = styled.button`
background-color: tomato;
border: none;
padding: 10px 20px;
color: white;
font-weight: bold;
cursor: pointer;
`;
function App() {
return (
<Father>
<Btn>Log in</Btn>
<Btn as="a" href="/">Log in</Btn>
</Father>
);
}

'Frontend > 🌐 React' 카테고리의 다른 글
| 🌗 Styled Components로 라이트/다크 모드 전환하기 (0) | 2025.03.26 |
|---|---|
| Styled Components - 애니메이션, 컴포넌트 선택자, 중첩 스타일링 (0) | 2025.03.26 |
| React validation 리액트 유효성 검사 Formik VS REACT Hook form (0) | 2023.01.12 |
| react iframe에 의해 클릭 안되는 문제 해결 (0) | 2023.01.06 |
| 리액트 팝업창/모달/다이얼로그 구현하기, 삭제버튼 구현, 구조분해할당 (0) | 2023.01.05 |
댓글