title 컴포넌트를 만들었는데 태그에 따라 사이즈를 정하는게 좋은 건지?
- 시맨틱하게 제목 태그를 쓰고 싶어서 props으로 헤딩태그의 이름을 받아 돔객체를 생성하도록했습니다! 헤딩태그는 오로지 의미뿐이고, 헤딩태그의 숫자에 따라 폰트사이즈가 정해지는 건 적합하지않다고 알고 있습니다. 그래서 resetCss를 적용했을 때도 모든 헤딩태그의 사이즈가 해제되는 걸 확인했습니다! 현재 작성해놓은 코드는 헤딩태그의 종류와 size를 각각 받도록 해놨는데, 팀원들과 상의했을 때 헤딩태그의 종류에 따라 size가 정해지지 않는다면 굳이 Title컴포넌트를 쓸 이유가 있을까? 라는 의문점이 생겼습니다. 저희 팀(프로젝트)의 제목 사이즈에 대한 디자인 시스템을 정해서 헤딩태그의 종류에 따라 사이즈를 고정해놓는게 좋을까요?? (ex. h1- 2rem, h2-1.5rem 등등..)
const Title = ({ children, h2, h3, h4, h5, h6, size, color, weight, marginBottom, extraItem, ...props }) => { const Tag = h2 ? 'h2' : h3 ? 'h3' : h4 ? 'h4' : h5 ? 'h5' : h6 ? 'h6' : 'h1'; const StyledTag = styled(Tag)` font-size: ${({ size }) => size === 'small' ? theme.font.small : size === 'base' ? theme.font.base : size === 'medium' ? theme.font.medium : size === 'large' ? theme.font.large : size === 'xLarge' ? theme.font.xLarge : typeof size === 'number' ? `${size}rem` : size}; font-weight: ${({ weight }) => weight}; color: ${({ color }) => color}; margin-bottom: ${({ marginBottom }) => typeof marginBottom === 'number' ? `${marginBottom}rem` : marginBottom}; display: flex; justify-content: space-between; `; ...
wrapped컴포넌트를 적합하게 사용했는지?
좋아요 버튼을 스토리북에 등록하려고 했는데 좋아요 컴포넌트 내부에 api와 contextApi가 사용되어 오류가 났었습니다.
서치를 해보니 스토리북에 컴포넌트를 등록하려면 외부 영향을 받지 않는 pure컴포넌트로 구현을 해야 적합하다는 것을 알게되었습니다.
그렇기에 api, contextApi가 관련된 값이나 함수들을 props으로 받게 하기 위해 리팩토링을 했습니다!
하지만 좋아요 컴포넌트는 2개의 페이지에서 사용이 되었고 depth도 깊었기 때문에 페이지 컴포넌트를 시작으로 props으로 계속 넘겨받는다면 비효율적이라는 생각이 들었습니다(중복코드 문제 포함)
그러던 중 선협님이 atomic design에 대해 쓰신 글을 보고 wrpped컴포넌트를 도입하면 좋을 것 같아서
내부 컴포넌트로 생성하고 api, contextApi 관련 코드를 작성 후 값과 함수를 좋아요 컴포넌트에 내려주어서 구현을 했습니다. (스토리북에는 Wrapped가 안감싸진 순수 Like컴포넌트로 작성했습니다)
Wrapped컴포넌트를 이렇게 사용하는게 맞는지, 사용한다면 내부 컴포넌트로 만드는게 좋은지, 아니면
새로 폴더를 만드는게 더 좋은지 궁금합니다..!!
폴더 구조

왼 - Like컴포넌트 / 오 - Like를 감싼 Wrapped컴포넌트

storybook에는 프레젠테이셔널 컴포넌트만 등록할 수 있는지? (page나 wrapped는 제외해야하는지?)
스토리북에 컴포넌트 등록 시에 외부 영향을 받는(api나 api가 사용된 context, redux) 코드가 포함된 page나 wrapped컴포넌트는 제외하고 오로지 pure한 컴포넌트만 등록해야할까요??