-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
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
refactor: 기초 recipe item 컴포넌트 구현 #83
Conversation
🔗 배포된 storybook 주소: https://65f015a4aed45406385006ee-iimzmmdlxp.chromatic.com/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
와아아ㅏ아우우우우우 해옹 코드 너무 깔끔하고 좋네요👍 참고한 링크도 봤는데 recipe를 계속 가져와야하는 건 어쩔 수 없는 부분인 것 같기도 해요
그리고 Text 컴포넌트에 className 안먹는건 feat/v2 pull 땡기면 괜찮아질거에요 확인해주세요!
그리고 디자이너분들이랑 충분히 논의해봐도 될 것 같습니다.
const author = 'author' in recipe ? recipe.author : null; | ||
return ( | ||
<RecipeItemProvider recipe={recipe}> | ||
<Link to={`${id}`}>{children}</Link> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<Link to={`${id}`}>{children}</Link> | |
<Link to={id}}>{children}</Link> |
그냥 이렇게 적어도 될듯!!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
to가 string만 받을 수 있나봐요..!
'number' 형식은 'To' 형식에 할당할 수 없습니다.ts(2322)
요렇게 에러가 뜨네용?!?!
<div style={{ display: 'flex', gap: '0.3rem' }}> | ||
<RecipeItem.Author /> | ||
<RecipeItem.CreatedDate /> | ||
</div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
인라인 이런 말하는건가요?! 저는 얘네는 큰 컴포넌트로 묶어도 될 것 같아요!
그리고 Flex, Grid 컴포넌트 만들면 더 깔끔해지겠네요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
좋슴니다 따로 묶어서 구현했습니다!
나중에 화면 작업 끝나면 바로 Flex랑 Grid랑 Heading 같은 애들 만듭시다~~
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Flex, Grid, Heading 너무 필요..
🔗 배포된 storybook 주소: https://65f015a4aed45406385006ee-gdfxxonbey.chromatic.com/ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
완전 굿입니다.!
컴파운드 특성상 컨텍스트 가져오는 건 어쩔 수 없져
디자인은 통일하는게 좋아보입니다.!
수고했어요
const { recipe } = useRecipeItemValueContext(); | ||
const { title } = recipe; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const { recipe } = useRecipeItemValueContext(); | |
const { title } = recipe; | |
const { recipe: { title } } = useRecipeItemValueContext(); |
너무 반복된다면 이렇게 할 수 있었던거 같은데 잘 기억이 안 나네요 ㅎㅎ
이거 머지되면 제 검색에서 가져다 쓸게용 |
🔗 배포된 storybook 주소: https://65f015a4aed45406385006ee-gyayghcmmj.chromatic.com/ |
컴포넌트 만든 거 recipeItem에 추가했는데 그리고 컴포넌트 이름 추천 받습니다... |
export const RecipeItemWithProductButton = () => { | ||
return ( | ||
<RecipeItem> | ||
<RecipeItem.ImageAndFavoriteButton> | ||
<RecipeItem.ProductButton /> | ||
</RecipeItem.ImageAndFavoriteButton> | ||
<div style={{ height: '8px' }} /> | ||
<RecipeItem.Title /> | ||
<RecipeItem.AuthorAndCreatedDate /> | ||
</RecipeItem> | ||
); | ||
}; | ||
|
||
export const RecipeItemWithProductCircleButton = () => { | ||
return ( | ||
<RecipeItem> | ||
<RecipeItem.ImageAndFavoriteButton> | ||
<RecipeItem.ProductCircleButton /> | ||
</RecipeItem.ImageAndFavoriteButton> | ||
<div style={{ height: '8px' }} /> | ||
<RecipeItem.Title /> | ||
<RecipeItem.Author /> | ||
<RecipeItem.Content /> | ||
</RecipeItem> | ||
); | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ProductButton이 그 상자모양 icon이고 ProductCircleButton이 사용한 상품 이미지 맞죠?? 뭔가 헷갈려서
RecipeItemWithDiskIcon / RecipeItemWithProductDetailImage 이런식으로 짓는�건 어떤가요?! 버튼이라는 기능보다는 어떻게 생겼는지 보이면 쓰는 입장에서 더 좋을 것 같다는 의견 🤔 사실 잘 모르겠음 다른 분들도 의견 부탁.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맞아여! 전 타미 말대로 바꾸는 거 괜춘한 거 같아요!!
그러면 RecipeItemWithDiskIconAndContent 이건 괜찮나여?
이름이 너무 기나 싶어서 ㅠ 근데 다른 점이 진짜 content 추가밖에 없음.... 😇
그리고 내부 이름(<RecipeItem.ProductCircleButton />)은 그대로 두고?!?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네이밍 진짜 어렵네여 .. 😇 근데 길어지더라도 다 전달되는게 나을 것 같긴 해요
내부도 바꾸면 좋을 것 같긴 해요 제 의견!!
아 근데 저 diskicon이 또 recipeproductbutton으로 컴포넌트화 되어있어서.. 차라리 recipeproductbutton을 넣는게 나으려나.... 해온이 잘 결정해주세요 🤔
🔗 배포된 storybook 주소: https://65f015a4aed45406385006ee-evgjcyeckr.chromatic.com/ |
<img | ||
className={recipeImage} | ||
src={image ?? defaultImage} | ||
alt={`조리된 ${title}`} | ||
loading="lazy" | ||
onLoad={() => image && setIsImageLoading(false)} | ||
/> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
뭔가 여기에 width, height 정의가 안돼서 div가 크게 잡히는 것 같기도 한데.. 구글링 해보니까 div에 line-height: 0
넣으면 해결된대요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
우왕 해결 됐슴다!! 타미 짱 👍
<div className={productButtonWrapper} onClick={(e) => e.preventDefault()}> | ||
<RecipeProductButton isTranslucent products={products} /> | ||
</div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이거 2번째 문제때문에 div로 추가적으로 감싸게 된건가요?!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
얘는 원래 있던 친구인데, 레시피 아이템에서만 위치 조정이 가능하게 하려구 감쌌어용~
요 친구는 다른 곳에서도 사용하니까 거기에서는 영향 안 받게 하려구!
line height 수정하니까 2번 문제도 같이 해결 됐슴니당~~ ><
저는 타입 해온이 한 방식 괜찮은거 같아여~!~! |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
코멘트 확인해주세요 해온~
대규모 공사를 했네요.! 고생하셨슴다
그리고 원래 z-index도 있었는데, 얘가 하단 네비게이션 바 위에 둥둥 떠다녀서 없애버렸습니다.
제가 테스트하고 못 뺐는데 ㅎㅎ.. 감사함다
- DiskIconButton의 bottom이 어디 기준으로 잡히는지 알 수 없습니다.
productCircle은 바텀 수정 없고, productButton만 다르게 잡힌다는건가요?
const { id } = recipe; | ||
|
||
return ( | ||
<RecipeItemProvider recipe={recipe}> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
여기서 아래로 내려주니까
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맞네...여기서 감싸주고 있었구나...
<RecipeItemProvider recipe={recipe}> | ||
<DefaultRecipeItem /> | ||
</RecipeItemProvider> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
<RecipeItemProvider recipe={recipe}> | |
<DefaultRecipeItem /> | |
</RecipeItemProvider> | |
<DefaultRecipeItem recipe={recipe} /> |
props로 내려주고
const RecipeItem = ({ children }: PropsWithChildren) => { | ||
const { recipe } = useRecipeItemValueContext(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const RecipeItem = ({ children }: PropsWithChildren) => { | |
const { recipe } = useRecipeItemValueContext(); | |
const RecipeItem = ({ recipe, children }: PropsWithChildren) => { |
|
||
export default RecipeItem; | ||
|
||
export const DefaultRecipeItem = () => { |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
export const DefaultRecipeItem = () => { | |
export const DefaultRecipeItem = ({recipe}) => { |
이렇게.?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
구웃~~ 말한대로 수정했슴당 확인해보시져!!!
content?: string; | ||
products?: RecipeProduct[]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
👍
RecipeItem.AuthorAndCreatedDate = AuthorAndCreatedDate; | ||
RecipeItem.Content = Content; | ||
|
||
export default RecipeItem; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
얘는 외부에서 사용하지 않고 아래 친구들만 사용하는거죠?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
얍얍 그렇슴다!
🔗 배포된 storybook 주소: https://65f015a4aed45406385006ee-mnrobvyytn.chromatic.com/ |
얘는 마이페이지에만 써서 아직 안 붙어봤는데 아마 바텀 위치 이상하게 잡혔을거에요 ! |
고생하셨습니다 |
Issue
✨ 구현한 기능
전체 레시피 아이템 컴포넌트를 잘게 나누었습니다.
현재, 이미지와 좋아요 아이콘은 모든 컴포넌트에 공통으로 들어가있기때문에 하나의 컴포넌트로 묶고,
그 안에 따로 children을 받게 해 사용한 상품 관련 컴포넌트를 받습니다.
처음에는 그냥 다 따로 했었는데, 이미지&좋아요 children으로 안 받으면 사용한 상품 컴포넌트가 부모 인식을 바깥으로 해서 안 되더라구요 😇
레시피 정보는 따로 context를 만들어 바로 가져올 수 있도록 했습니다.
아래 링크를 많이 참고했음.
근데 매번 모든 컴포넌트에서 const { recipe } = useRecipeItemValueContext()를 받아와야하는건 좀 거슬림.
더 생각해보도록 하겠음...!
참고한 링크
📢 논의하고 싶은 내용
얘는 TopBar랑 다르게 아예 recipeItem 내부에서 큰 덩어리로 컴포넌트화 하려고 하는데 어때요?
스토리북 보면 알겠지만, 중간에 제가 임의로 인라인 스타일 먹여서 묶어 놓고 그래서 좀 드럽거든요.
그리고 text에 추가 css 주는거
이런식으로 하면 안 되나요?? 제목이랑 내용보면 알겠지만, size랑 weight, color 같은게 아예 안 먹어서요...
className은 참고로 말줄임표에 관한 것들이라 size, weight, color랑 아무 상관이 없습니다...
🎸 기타
이게 디자인을 보면, 작성자 & 작성일자가 컴포넌트별로 색이 다르더라구요?
밑에 내용이 붙냐 아니냐에 따라서 다르게 한 듯?
조건문을 두거나 props로 색을 받을까 하다가, 우리 코드가 너무 더러워질 것 같아서 슬며시 그냥 검정색으로 뒀는데....
조금 더러워지더라도 디자인을 그대로 따르는게 좋나요 아니면 디자이너분께 바꾸는거 문의해볼까요??
마지막으로 여기서 레시피 아이템 컴포넌트 교체까지 다 완료하겠음...!
⏰ 일정