반응형
Button.js에서 size props를 생성합니다
function Button({ children, color, size, ...rest }) {
return (
<StyledButton color={color} size={size} {...rest}>
{children}
</StyledButton>
);
}
//Button 기본값 설정
Button.defaultProps = {
color: "blue",
size: "medium",
};
사이즈 props에 따라 각기 다른 값을 주겠습니다
props.size가 large라면 css에 어떤값을 줄 것이냐 라는 의미입니다
${(props) =>
props.size === "large" &&
css`
height: 3rem;
font-size: 1.25rem;
`}
2번 복사해서 large, medium, small을 만들고 값을 지정하겠습니다
/* 크기 */
${(props) =>
props.size === "large" &&
css`
height: 3rem;
font-size: 1.25rem;
`}
${(props) =>
props.size === "medium" &&
css`
height: 2.25rem;
font-size: 1rem;
`}
${(props) =>
props.size === "small" &&
css`
height: 1.75rem;
font-size: 0.875rem;
`}
colorStyles를 바깥으로 빼서 분리한것처럼 props.size도 똑같이 해보겠습니다
크기에 대한 값을 sizeStyles 변수를 생성 후 넣어주겠습니다
const sizeStyles = css`
/* 크기 */
${(props) =>
props.size === "large" &&
css`
height: 3rem;
font-size: 1.25rem;
`}
${(props) =>
props.size === "medium" &&
css`
height: 2.25rem;
font-size: 1rem;
`}
${(props) =>
props.size === "small" &&
css`
height: 1.75rem;
font-size: 0.875rem;
`}
`;
이렇게 넣어줍니다
/* 크기 */
${sizeStyles}
App.js에서 사이즈를 주겠습니다
const ButtonGroup = styled.div`
& + & {
margin-top: 1rem;
}
`;
Button을 감싸줍니다
function App() {
return (
<ThemeProvider theme={{ palette }}>
<AppBlock>
<ButtonGroup>
<Button>BUTTON</Button>
<Button color="pink">BUTTON</Button>
<Button color="violet">BUTTON</Button>
</ButtonGroup>
</AppBlock>
</ThemeProvider>
);
}
Button에 사이즈를 지정합니다
<Button color="pink" size="large">
BUTTON
</Button>
<Button>BUTTON</Button>
<Button color="violet" size="small">
BUTTON
</Button>
Button.js에서 보면 스타일링한 값 중 중복된 값이 있습니다 이걸 객체를 만들어서 코드의 가독성을 높여보겠습니다
const sizes = {
large: {
height: "3rem",
fonsSize: "1.25rem",
},
medium: {
height: "2.25rem",
fontSize: "1rem",
},
small: {
height: "1.75rem",
fontSize: "0.875rem",
},
};
크기에 적었던 부분들을 모두 날려줍니다
const sizeStyles = css``;
이렇게 작성해줍니다
const sizeStyles = css`
/* 크기 */
${({ size }) => css`
height: ${sizes[size].height};
font-size: ${sizes[size].fontSize};
`}
`;
사이즈별로 객체를 만들고 height, fontSize 정보를 넣어주고 props에 size 정보를 읽어와서 sizes 변수 안에 있는 데이터를 찾고
맞는 값을 넣어주도록 설정했습니다
'REACT LIBRARY > Styled-Component' 카테고리의 다른 글
Styled-Components Dialog 만들기 (0) | 2022.06.29 |
---|---|
Styled-Components 버튼 스타일 추가 설정 (0) | 2022.06.29 |
Styled-Components Polished 라이브러리 (0) | 2022.06.29 |
Styled-Components로 버튼 만들기 (0) | 2022.06.29 |
Styled-Components 사용방법 (0) | 2022.06.29 |