Styled-Components 확장해서 사용하기
📖 지난 글 보기
안녕하세요. Nerd Lee 입니다.
지난 글에서, styled-components를 사용하는 방법에 대해서 알아봤습니다.
그런데! 지난 글을 보면, 같은 크기의 박스인데.. color만 다를 뿐인데
이걸 꼭 굳이 두개를 같이 써야할까? 라는 고민을 하실 수 있습니다.
그럼 어떻게 하면, 같은 Box 컴포넌트를 가지고 색깔을 변경할 수 있을까에 대해서 한 번 알아보도록 하겠습니다!
Styled-Components 확장 사용
1. 코드 작성하기
지난 강의 코드
import styled from "styled-components";
const Parent = styled.div`
display: flex;
`;
const ChlidBoxOne = styled.div`
background-color: pink;
width: 100px;
height: 100px;
`;
const ChlidBoxTwo = styled.div`
background-color: black;
width: 100px;
height: 100px;
`;
function App() {
return (
<Parent>
<ChlidBoxOne />
<ChlidBoxTwo />
</Parent>
);
}
export default App;
위의 코드를 밑에처럼 변경해주세요.
import styled from "styled-components";
const Parent = styled.div`
display: flex;
`;
const ChlidBox = styled.div`
background-color: pink;
width: 100px;
height: 100px;
`;
function App() {
return (
<Parent>
<ChlidBox />
<ChlidBox />
</Parent>
);
}
export default App;
- 그리고 npm start를 입력해서 실행하면, 핑크색 박스만 2개가 나란히 정렬이 되어 있는 것을 확인하실 수 있습니다.
2. props로 색깔만 전달해서 변경하기
react에서 자주 사용되는 props 처럼, styled-components에 전달해서 색깔을 변경해봅시다.
import styled from "styled-components";
const Parent = styled.div`
display: flex;
`;
const ChlidBox = styled.div`
background-color: ${(props) => props.backgroundColor};
width: 100px;
height: 100px;
`;
function App() {
return (
<Parent>
<ChlidBox backgroundColor="pink" />
<ChlidBox backgroundColor="black" />
</Parent>
);
}
export default App;
- ChlidBox 컴포넌트에, backgroundColor 라는 속성을 넣어주고, 거기에 각각의 색깔 값을 넣어줍니다.
그리고 위에 있는 ChlidBox에는 ${(props) => props.backgroundColor} 로 값을 받아와서 속성에 값을 대입합니다.
3. styled-components 확장해서 사용해보기
box가 아닌 circle을 만들어봅시다.
import styled from "styled-components";
const Parent = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: ${(props) => props.backgroundColor};
width: 100px;
height: 100px;
`;
const Circle = styled.div`
background-color: ${(props) => props.backgroundColor};
width: 100px;
height: 100px;
border-radius: 50px;
`;
function App() {
return (
<Parent>
<Box backgroundColor="pink" />
<Circle backgroundColor="black" />
</Parent>
);
}
export default App;
- Circle을 추가해주고, ChildBox가 아닌 Box로 이름을 변경한 뒤
Box에 있는 값을 Circle에 복사 / 붙여넣기 한 다음, border-radius만 추가해줍니다.
하지만, 이번엔 속성값이 중복이 됩니다. border-radius만 추가하면 되는데 말이죠….;;
걱정하지 마세요! styled-components는 가능합니다!!!
styled() 함수 사용하기
import styled from "styled-components";
const Parent = styled.div`
display: flex;
`;
const Box = styled.div`
background-color: ${(props) => props.backgroundColor};
width: 100px;
height: 100px;
`;
const Circle = styled(Box)`
border-radius: 50px;
`;
function App() {
return (
<Parent>
<Box backgroundColor="pink" />
<Circle backgroundColor="black" />
</Parent>
);
}
export default App;
- 위의 코드처럼 작성하게 되면, styled(Box)로, Box에 있는 속성값을 상속받는 형태가 됩니다.
클래스를 사용하는 것 처럼 말이죠.
다음 글로 찾아오겠습니다!