반응형
✔️ 필요성
styled-components를 적용한 컴포넌트를 만들어놓고, 그 컴포넌트를 다시 가지고 올 때 일부 CSS를 수정하고 싶을 때가 있다. 그리고 그 때 styled(component) 이렇게 해서 쓰는 것을 보통 Extend styled-component라고 이야기한다.
그런데 Extend Style이 안 먹을 때가 있다.
새로 적용하는 CSS style을 어떤 컴포넌트에다가 써야할 지 모르는 경우에 보통 그러하다
import React from "react";
import styled from "@emotion/styled";
const Outside = styled.div`
`;
const Inside = styled.div`
`;
interface Props {
children: React.ReactNode;
}
const PageHeader = ({ children }: Props) => {
return (
<Outside>
<Inside>{children}</Inside>
</Outside>
);
};
export default PageHeader;
import styled from '@emotion/styled';
import PageHeader from './PageHeader';
const Container = styled(PageHeader)`
padding-top: 160px;
padding-bottom: 120px;
`;
✔️ 문제 해결
이 때는 내가 새로 적용하는 스타일이 어느 컴포넌트에 들어가야할 지 지정해주면 된다.
...props 를 통해서 Inside 컴포넌트로 스타일이 추가되도록 변경해준다.
import React from "react";
import styled from "@emotion/styled";
const Outside = styled.div`
`;
const Inside = styled.div`
`;
interface Props {
children: React.ReactNode;
}
const PageHeader = ({ children, ...props }: Props) => {
return (
<Outside>
<Inside {...props}>{children}</Inside>
</Outside>
);
};
export default PageHeader;
✔️ 다시 수정
...props 말고 className을 넣어야 한다.
interface Props {
children?: string;
type: "title" | "copy";
scale: "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8";
color: string;
className?: string;
}
const Text = ({ children, type, scale, color, className }: Props) => {
return (
<P className={`${type}-case${scale} ${className}`} color={color}>
{children}
</P>
);
};
Text.defaultProps = {
color: theme.colors.black,
};
export default Text;
https://styled-components.com/docs/basics#styling-any-component
반응형
'프론트엔드 앱 > Styled-Components' 카테고리의 다른 글
styled-components에서 & 활용해서 CSS 분기 깔끔하게 하기 (0) | 2022.02.11 |
---|---|
styled-components에서 classNames 사용해서 props에 따른 CSS 깔끔하게 사용하기 (0) | 2022.02.11 |
글자 길이가 넘칠 때 말줄임표(...)로 줄이기 (0) | 2022.01.03 |
react-navigation 하단줄 없애기 #borderBottom (0) | 2021.12.23 |
styled-components props와 theme을 동시 사용 (0) | 2021.12.13 |