Styled Components/개념정리
[STYLED COMPONENTS] 컴포넌트 확장하기
xowoony
2023. 3. 27. 20:08
학습일 : 2023. 03. 27
중복된 css 중 일부분만 바꾸고 싶은 경우가 많은데,
이런 경우 코드를 복붙하기에는 너무 비효율적이라 생각이 많이 들었었다.
어떻게 하면 기존에 있는 컴포넌트를 스타일을
효율적으로 확장할 수 있는지 알아보자!
여기에
Box 컴포넌트가 똑같은게 두개가 생성되어 있다고 치자.
지금은 두개 모두 빨간색인 상태이다.
import styled from "styled-components";
const Father = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: red;
width: 100px;
height: 100px;
`;
function App() {
return (
<Father>
<Box />
<Box />
</Father>
);
}
export default App;
실행해보면 이렇게 두개 다 배경색이 빨간색으로 적용되어 있음을 볼 수 있다.
이 상태에서 나머지 하나의 <Box /> 에
파란색을 적용하고 싶다면
아래처럼 prop를 이용하면 된다.
1.
Box 태그 안에
내가 지어준 prop 이름인
bgColor="red"
bgColor="blue"
이런식으로 작성해준 다음
2.
이 prop들을 컴포넌트에서 받아주어야 하는데
컴포넌트를 정의 해준 const Box = 어쩌고 에서
css 속성으로 background-color 부분에
background-color: ${(props) => props.bgColor};
이렇게 파라미터를 받는 함수를 적어주면 된다.
실행결과
전체 코드는 아래와 같다.
import styled from "styled-components";
const Father = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: ${(props) => props.bgColor}; // 2
width: 100px;
height: 100px;
`;
function App() {
return (
<Father>
<Box bgColor="red" /> {/*1*/}
<Box bgColor="blue" /> {/*1*/}
</Father>
);
}
export default App;
이번에는 Circle 이라는 컴포넌트를 만들어 볼건데
이 컴포넌트는 Box 컴포넌트에서 border-radius : 3rem; 을 추가시킨 애로 만들고 싶다면
const Circle 컴포넌트를 만들어 줄 때
styled(Box)`스타일속성`;
이라고 작성해주면 된다.
전체코드는 아래와 같다.
import styled from "styled-components";
const Father = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: ${(props) => props.bgColor}; // 2
width: 100px;
height: 100px;
`;
const Circle = styled(Box)`
border-radius: 3rem;
`;
function App() {
return (
<Father>
<Box bgColor="red" /> {/*1*/}
<Circle bgColor="blue"></Circle>
</Father>
);
}
export default App;
실행결과
엄청 편리함! :>