-
Notifications
You must be signed in to change notification settings - Fork 163
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
[1단계 - 장바구니 미션] 초코(강다빈) 미션 제출합니다. #274
Conversation
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
Co-Authored-By: Yuseon Kim(썬데이) <74897720+useon@users.noreply.github.com>
…Count로 네이밍 변경 - uniqueItemCount : 장바구니에 담긴 서로 다른 상품의 종류 수 - totalItemCount : 장바구니에 담긴 모든 상품의 총 개수
…SummarySelectorState로 통합
안녕하세요 호프, 날씨 좋았던 주말 잘 보내셨나요~ 🌞 💻 로컬 실행
🔗 배포 링크이전 피드백에 남긴 질문 바로가기주요 피드백 반영 사항 커밋 바로가기
리팩터링하고 싶은 부분
❓ 질문사항
|
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.
안녕하세요, 초코~ 🍫 개선해주시느라 고생많으셨어요. 정말 뚝딱 잘 개선해주셔서 크게 추가로 코멘트 남길만한 부분은 없었습니다ㅎㅎ
남겨주신 질문에 대한 답변도 코멘트로 달아두었으니, 다음 단계에 가시기 전에 확인해주세요!
추가로 남겨주신 장바구니 아이템 추가 API 관련 질문은..저도 테스트 해봤을 때
동일 상품을 추가해도 다른 id 값으로 API 응답값이 넘어오더라고요, 아마 요청별로 아이템을 저장하나봅니다. (예리하십니다 👏 )
제 생각으로는 이건 클라이언트에서 별도로 처리해주지 않아도 된다고 생각합니다. 만약 클라이언트에서 가공로직을 붙여서 동일 상품을 필터링해준다고 해도, 페이지네이션 기능이 추가 되면 클라이언트에서 유의미한 가공 처리는 거의 불가능하게 됩니다. 하더라도 서버와 클라이언트 양측에게 매우 비효율적이지요.
이번 기회에 클라이언트의 책임은 어디까지인가?를 한번 고민해봐주셔도 좋겠습니다 :)
너무 잘 개선해주셔서 이번 단계는 여기서 마무리하려고 합니다. 추가로 개선해주시고 싶으신 사항은 2단계에서 함께 진행해주세요 :) 고생많으셨어요! 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.
훅 만들어주신 것 넘 좋습니다 👍
개인적으로 useDecreaseCartItemQuantity, useDeleteCartItem, useIncreaseCartItemQuantity 는 기능상 세트로 묶여서 같이 사용될 상황이 많을 것 같아서,
하나의 훅으로 묶는편이 코드 응집도를 더 높이지 않을까~생각해봅니다ㅎㅎ
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.
저는 삭제는 수량 변경과 다르게 사용될 수 있다고 생각했습니다. 그래서 delete는 별도의 훅으로 두고, increase와 decrease를 하나의 훅으로 합치도록 수정했습니다!
const [cartItems, setCartItems] = useRecoilState(cartItemsState); | ||
const { uniqueItemCount } = useRecoilValue(cartSummarySelectorState); | ||
|
||
useEffect(() => { | ||
const fetchCartItems = async () => { | ||
try { | ||
const items = await getCartItems(); | ||
setCartItems(items); | ||
} catch (error) { | ||
console.error(ERROR_MESSAGES.FETCH_CART_ITEMS, error); | ||
} | ||
}; | ||
|
||
fetchCartItems(); | ||
}, []); |
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.
지금보니 요 부분(장바구니 아이템 초기 api 요청 후 전역상태에 저장)도 중요한 로직이니, 훅으로 분리해도 좋겠네요ㅎㅎ
interface CartItemQuantity { | ||
id: number; | ||
quantity: number; | ||
} |
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단계에서 반영할 수 있도록 해보겠습니다! 감사합니다 :) |
아톰 : 셀렉터 : 아이템 삭제, 체크상태 변경에 영향을 받는 셀렉터들이 많기 때문에 훅 : |
안녕하세요 호프! 초코🍫입니다.
만나서 반갑습니다 :>
시작부터 끝까지 우여곡절 많았던,, 장바구니 미션 리뷰 잘 부탁드립니다.
💻 로컬 실행
🔗 배포 링크
바로가기
🔑 키워드 및 학습 목표
😮💨 상황공유
저는 우아한테크코스를 시작하며 웹 프론트엔드에 입문했어요. 그래서 리액트에 대한 이해도도 낮고, recoil은 이번 미션에서 처음 접하게 되었어요. 이를 참고하여, 키워드 및 학습 목표에 맞게 미션을 수행하고 있는지에 집중하여 리뷰해주시면 감사하겠습니다!
+) 페이지 배포 이후에 useEffect의 의존성 배열에 상태가 들어가 있다는 걸 깨달아서 배포 브랜치에서 수정하게 되었습니다. 코드리뷰를 받는 step1 브랜치에서는 수정되지 않은 점 양해 부탁드립니다! 추후 리팩터링 단계에서 수정하겠습니다.
+) 추가로 페이지 확인할 때 chomre의 설정에서 안전하지 않은 콘텐츠를 허용으로 바꿔줘야 제대로 보인다고 합니다!
❓ 질문사항
이번 미션에서는 UI 작업하는 데에 시간을 많이 사용한 것 같아요. 저는 이번에 Styled Component를 사용하면서 네이밍에도 너무 힘이 들었고, 컴포넌트를 분리하다보니 depth가 이렇게까지 깊어도 되는 걸까? 라는 생각이 들었어요. 지금까지 미션을 진행하면서 UI에 대한 피드백을 많이 못받아서 호프에게 UI적인 리팩터링도 많이 받고 싶어요! UI 작업할 때 호프만의 팁이나 신경쓰는 부분이 있을까요?
rcoil,, 개념은 쉬운 것 같았는데 쉽지 않더라구요. 실습시간에 잠깐 접한 걸로 이번 미션에서 수행하기에는 어려움이 많았던 것 같아요. 사용은 했지만 recoil을 제대로 사용한 건지 의문이에요. 특히 다른 상태 관리 라이브러리도 많은데 이번 미션에선 왜 recoil을 사용한 건지 모르겠어요. redux보다 학습 곡선이 낮다는 것 이외에 이유가 있을까요?
test,, 도 처음엔 초기값만 테스트 가능할 정도로 어려움이 너무 많았는데요. API 통신이 이뤄지는 걸 직접 테스트하기에는 어려움이 있다고 생각했어요. 그래서 msw 를 사용해야 하나? 싶었는데 이것저것 시도해보다 도저히 내가 뭘 하고 있는 건지 파악이 안될 정도로 어려워서 mockData를 넣어주면서 테스트하도록 진행했어요. 이런식으로 테스트 하는 게 맞는건지 궁금해요. API 통신을 통해 데이터를 가져오게 될 경우 테스트하는 다른 방법도 있을까요?
recoil을 작업하면서 atom, selector, atomFamily, selectorFamily ,, 어떻게 관리할지 정하는 게 어렵더라고요. 그래서 현재는 atom과 selector에 익숙해지자는 목표로 이 두가지 방법만 생각했는데요, atomFamily나 selectorFamily 등을 사용하여 더 나은 방향으로 리팩터링할 요소가 있다면 짚어주시면 감사하겠습니다.