React에서 CSS를 대신하던 SASS.
이번엔 SASS를 대체할 수 있는 기술이 또 어딘가에서 등장했다. (나한테만 새로운 등장..)
바로 Styled Component라는 라이브러리.
Styled Component는 왜 등장했고, 어떤 장단점이 있는지 살펴본다.
이제야 코드 작성에 조금이나마 익숙해지나 했는데 이게 웬걸!!
2차 프로젝트에 들어가며 또 다른 기술스택을 익히고 사용해야 하는 상황을 맞이했다. 다행히도 지금까지의 노력이 헛되지는 않아서 비교적 빠르게 익숙해지고 있기는 하지만, 새로운 개념이므로 복습을 해보자..!
Styled Component는 기존 SASS가 가지던 문제를 해결하여 React를 조금 더 쉽게 스타일링할 수 있도록 개발된 라이브러리이다. React를 컴포넌트 단위로 분리하여 스타일링 할 수 있도록 도와주며 여러 편리한 기능을 제공한다.
import styled from 'styled-components';
<div className="detailPageWrapper" />
의 형태가 아닌 <DetailPageWrapper />
의 형태로 작성된다는 것!export default function DetailPage() {
return (
<DetailPageWrapper>
<ProductHead />
</DetailPageWrapper>
);
}
const DetailPageWrapper = styled.div`
position: relative;
width: 900px;
margin: 50px auto;
`;
제한된 상황 속에서 짧게 Styled Component를 사용해보니 몇 가지 느껴지는 점이 있었다.
import React from 'react';
import styled from 'styled-components';
export default function StarRating() {
return rates.map((rate, idx) => (
<React.Fragment key={idx}>
<StarRate>
<StarImg alt="star rating" src="/images/회색별들.png" />
<ColoredStarBox width={rate.ratingNum * 20}>
<StarImgColored alt="star rating" src="/images/파란별들.png" />
</ColoredStarBox>
<RatingNum>{rate.ratingNum}</RatingNum>
<Bullet>•</Bullet>
<NumOfReviews>{rate.numOfReviews}개 후기</NumOfReviews>
</StarRate>
</React.Fragment>
));
}
const ColoredStarBox = styled.div`
position: absolute;
top: 0;
width: ${props => props.width}px;
overflow: hidden;
`;
위의 예시는 직접 작성한 코드 중 일부인데, html 코드 내에서 ColoredStarBox
의 props로 width={rate.ratingNum * 20}
을 넘겨주고 아래의 스타일링 코드에서 해당 props를 받아 width: ${props => props.width}px
로 사용한 것을 볼 수 있다.
- 디자인 요소를 상속해줄 수 있음
직접 사용해본적은 없지만, 스타일드 컴포넌트도 SASS처럼 공통적인 스타일링 부분을 다른 styled component로 상속해줄 수 있다.
render(
<div>
<Button>Normal Button</Button>
<TomatoAnchorButton>Tomato Button</TomatoAnchorButton>
</div>
);
const Button = styled.div`
color: palevioletred;
font-size: 1em;
margin: 1em;
padding: 0.25em 1em;
border: 2px solid palevioletred;
border-radius: 3px;
`;
const TomatoAnchorButton = styled(Button)`
color: tomato;
border-color: tomato;
`;
&:hover
나 컴포넌트 내에 포함된 i
태그 등은 네스팅이 가능하다.[참고] Styled Component 공식 문서
https://styled-components.com/
아직 공식문서를 꼼꼼하게 읽어보지 못해 다양한 기능이 있지만 활용하지 못하고 있는 상태! 필요한 기능이 있을 때 하나씩이라도 검색하여 알아봐야겠다. 그래도 개발자로 보내는 시간이 조금씩 늘어가면서 공식문서로 새로운 기술 스택을 배우는 방법을 조금씩 알아가는 것 같이 기쁘다.