공부

[React] Styled Component에서 props로 공통 스타일 정의하기

avocado8 2024. 8. 9. 22:19

 

스타일드 컴포넌트에서 공통 스타일을 공유하지만 일부만 다른 컴포넌트들을 만들 때, 중복된 코드가 발생하지 않게 하는 법을 알아보자

 

위 두 버튼은 배경 색만 다르고 다른 스타일은 모두 같다.

backgroundColor만 다르게 주고 나머지를 복붙할 수도 있겠지만 코드가 지저분해지니 버튼을 위한 스타일링을 하고, backgroundColor만 props로 따로 입력받아주겠다.

 

interface ActionBtnProps {
  backgroundColor: string;
}

export const ActionBtn = styled.button<ActionBtnProps>`
  width: 124px;
  height: 60px;
  color: #fff;
  border: none;
  font-size: 24px;
  font-family: Suite;
  border-radius: 4px;
  cursor: pointer;
  &:hover {
    opacity: 0.7;
  }
  background-color: ${(props) => props.backgroundColor};
`;

Props를 정의하고, styled.어쩌구<Props>의 형태로 정의해줄 수 있다.

props로 받은 backgroundColor을 css속성 background-color에 할당해주면, 나머지 스타일은 재사용하면서 배경색만 바꿔줄 수 있다.

 

적용하기

<ActionBtn backgroundColor="#C15555">취소</ActionBtn>
<ActionBtn onClick={onNext} backgroundColor="#5574C1">수납</ActionBtn>

정의한 ActionBtn 컴포넌트를 가져와 backgroundColor에 원하는 색상을 넣어주면 끝

 

근데 생각해보니 이 프로젝트에서 쓰일 버튼은 빨강 파랑 두개밖에 없는지라 그냥 깡으로 두개 만드는 게 더 편할지도 모르겠다... 일일이 색상 치는 것도 일인데 ㅎ

다양한 색상(아님 다른 스타일 속성)을 쓸 경우 유용할 것 같다.