We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
emotion의 CSS prop 기능을 이용해서 디자인 토큰, CSS mixin의 형태로 작성
emotion
CSS mixin 형식으로 스타일 작성하게 됨 (여러 디자인 토큰을 조합하는 형식)
Before:
const Card = styled.div` border-radius: ${round}px; background-color: ${primary ? theme.colors.blue100 : theme.colors.white}; ... `;
After
const Card: React.FC = ({ primary }) => <div css={[ border.md, primary ? bg.blue100 : bg.white, // ... ]} /> `;
React FC 말고 기존에 쓰던 styled API도 css props와 함께 사용할 수 있지만 둘을 동시에 사용하는 것은 good practice가 아니라고 합니다. // bad example const Card = styled.div` ${border.md} ${bg.white} `
React FC 말고 기존에 쓰던 styled API도 css props와 함께 사용할 수 있지만 둘을 동시에 사용하는 것은 good practice가 아니라고 합니다.
styled
// bad example const Card = styled.div` ${border.md} ${bg.white} `
text style, spacing, layout, border, sizing 등을 토큰으로 분리하고, 각각의 토큰을 조합(?)해서 사용하는 방식이기 때문에 재사용성을 높일 수 있음 (기존의 BorderedBox 같은거로 따로 뺄 필요 없음)
Before: Card를 확장해서 점선 테두리 카드를 만들고 싶다!
dashed
After:
const dashed = css` border: 1px dashed ${colors.gray300}; `; <Card css={dashed} />
React의 컴포넌트 작성 방식이 inheritance 보다는 composition에 더 친화적이기 때문에 더 적합
const DashedCard = styled(Card)` border: 1px dashed ... `; <DashedCard />
<div css={[cardStyle, dashedBorder]} />
ex) Flex layout 가지고 테두리 있는 스크롤 컨테이너 Before:
<BorderedBox ... > <Scroll> <Box dir="column" ... > // content </Box> </Scroll> </BorderedBox>
<div css={[border.gray300, column, scroll]} > // content </div>
ex) Header를 구현하려 하는데 border bottom 토큰이나 컴포넌트가 없는 경우
const headerStyle = css([ column, // 기존 토큰 text.heading1, css`border-bottom: 1px solid ${colors.gray600};` // raw css ]);
기존에 사용하고 있던 emotion의 기능을 사용하는 것이기 때문에
The text was updated successfully, but these errors were encountered:
논리적인 자세한 설명과 여러 자료를 첨부한 폭넓은 분석 공유해주셔서 감사합니다 :)
Sorry, something went wrong.
JeukHwang
No branches or pull requests
제안 내용 *
emotion
의 CSS prop 기능을 이용해서 디자인 토큰, CSS mixin의 형태로 작성Tasks
기존의 문제점
기존과의 차이점
CSS mixin 형식으로 스타일 작성하게 됨 (여러 디자인 토큰을 조합하는 형식)
Before:
After
도입 시 이점
1. 재사용성 증가
text style, spacing, layout, border, sizing 등을 토큰으로 분리하고, 각각의 토큰을 조합(?)해서 사용하는 방식이기 때문에 재사용성을 높일 수 있음 (기존의 BorderedBox 같은거로 따로 뺄 필요 없음)
2. 스타일 확장을 위해 prop을 추가하거나 새로운 컴포넌트를 만들 필요가 없음
Before:
Card를 확장해서 점선 테두리 카드를 만들고 싶다!
dashed
prop 추가 => Card 컴포넌트가 비대해짐or
After:
3. Inheritance 보다 Composition 선호
React의 컴포넌트 작성 방식이 inheritance 보다는 composition에 더 친화적이기 때문에 더 적합
Before:
After:
4. 기존의 컴포넌트 기반 조합 방식보다 DOM tree가 얕아짐
After:
5. 모듈화에 의존할 필요 없이 raw CSS로도 확장 가능 - 점진적 코드 정리 및 리팩토링 가능
6. 현 상황에서 제일 쉽게 적용할 수 있음
기존에 사용하고 있던
emotion
의 기능을 사용하는 것이기 때문에7. 기타 등등 공식 문서 에도 참고할거 많을듯
스크린샷
The text was updated successfully, but these errors were encountered: