Q.
styled-components들도, 컴포넌트니까, props를 사용할 수 있는 것인가?
styled-components들도, 컴포넌트니까, props를 사용할 수 있는 것인가?
A.
네, styled-components도 React 컴포넌트이기 때문에, props를 사용할 수 있습니다. styled-components에서는 props를 활용하여 스타일을 동적으로 변경하거나, 컴포넌트 내부 로직에 따라 다양한 스타일링을 적용할 수 있습니다.
props를 사용한 styled-components의 작동 방식
styled-components에서 props는 스타일 함수 내에서 접근할 수 있으며, 이를 통해 조건부로 스타일을 설정할 수 있습니다.
기본 예제: props로 동적 스타일링
import styled from "styled-components";
// styled.div에서 props를 받아 동적으로 스타일을 설정
const StyledButton = styled.button`
background-color: ${(props) => (props.primary ? "blue" : "gray")};
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
&:hover {
background-color: ${(props) => (props.primary ? "darkblue" : "darkgray")};
}
`;
function App() {
return (
<div>
<StyledButton primary>Primary Button</StyledButton>
<StyledButton>Default Button</StyledButton>
</div>
);
}
export default App;
결과:
- <StyledButton primary>: 파란색 배경 (primary가 true)
- <StyledButton>: 회색 배경 (primary가 없어서 false)
props를 이용한 복잡한 스타일링
예제: 조건부 스타일링 + 여러 props 사용
const Card = styled.div`
padding: 20px;
border: 1px solid ${(props) => (props.highlight ? "red" : "#ddd")};
background-color: ${(props) => props.bgColor || "white"};
box-shadow: ${(props) =>
props.elevated ? "0px 4px 6px rgba(0, 0, 0, 0.1)" : "none"};
`;
function App() {
return (
<div>
<Card highlight bgColor="lightyellow" elevated>
Highlighted and Elevated Card
</Card>
<Card>Normal Card</Card>
</div>
);
}
결과:
- highlight가 있는 경우:
- 빨간 테두리
- bgColor가 있는 경우:
- bgColor로 설정된 배경색
- elevated가 있는 경우:
- 그림자 추가
스타일링 외에도 props 활용 가능
props는 styled-components 내부에서 data-* 속성 전달이나, aria-*와 같은 접근성 속성을 설정할 때도 사용할 수 있습니다.
예제: props를 통해 데이터 속성 전달
const StyledButton = styled.button`
background-color: blue;
color: white;
`;
function App() {
return (
<StyledButton data-test-id="custom-button">
Button with Data Attribute
</StyledButton>
);
}
고급: attrs로 기본 props 설정
styled-components에서는 attrs 메서드를 사용하여 컴포넌트의 기본 props를 설정할 수 있습니다.
const Input = styled.input.attrs((props) => ({
type: props.type || "text", // 기본값 설정
placeholder: props.placeholder || "Enter text",
}))`
padding: 10px;
border: 1px solid #ddd;
border-radius: 5px;
`;
function App() {
return (
<div>
<Input placeholder="Custom Placeholder" />
<Input />
</div>
);
}
결과:
- 첫 번째 <Input>은 "Custom Placeholder"를 표시
- 두 번째 <Input>은 기본값인 "Enter text"를 표시
결론
- styled-components는 React 컴포넌트와 동일하게 props를 사용할 수 있습니다.
- 이를 통해 동적 스타일링이 가능하며, 더 나아가 데이터 속성 설정, 접근성 설정, 또는 기본값 설정 같은 다양한 용도로 활용할 수 있습니다.
- props를 사용하면 재사용 가능한 유연한 스타일링을 작성할 수 있어 매우 강력한 도구가 됩니다.
추가로 궁금한 점이 있으면 언제든 물어보세요! 😊
'언어 및 도구들 공부 > React' 카테고리의 다른 글
JSX 안에서 JS 표현식을 쓰기 위한 {} (1) | 2024.11.22 |
---|---|
React에서 map 함수를 통한 태그 생성 과정 (1) | 2024.11.21 |
styled-components 02 (0) | 2024.11.21 |
React에서 id 속성값으로 CSS를 쓰지 않는 이유 (0) | 2024.11.21 |
CSS 모듈로 가져온 속성값 - 대괄호 표기법 (0) | 2024.11.21 |