-
Notifications
You must be signed in to change notification settings - Fork 35
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
[Benny] 1주차 수요일 PR #14
Conversation
eslint, prettier 설치 styled-components, styled-reset 설치 global, theme 추가
지갑에서 금액 클릭시 금액 입력 기능 추가 입력된 금액으로 살 수 있는 상품 테두리색 변환 기능 추가
상품 선택시 2초후 상품 배출 후 잔돈 반환 기능 추가. 돈 투입후 5초 동안 입력이 없을시 자동 반환 기능 추가. 5초 안에 상품을 선택하면 상품이 나오고, 투입금액을 추가로 넣으면 자동 반환 되기까지 다시 5초 기다리는 기능 추가.
돈 충전 - 물건 구매 - 돈 충전 - 자동 반환할시 돈이 늘어나는 버그 픽스
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.
Benny ! 안녕하세요 만나서 반갑습니다. ㅎㅎㅎ
2 주 동안 잘부탁드립니다!!
배포 링크까지 만들어주셔서 어떤 UI/UX 인지 짐작할 수 있어서 리뷰가 너무 편했습니다. 감사합니다 ㅎㅎ
useCallback으로 함수를 최적화 해서 사용하면 최적화 해서 사용하는 함수 안에 있는 함수도 useCallback을 걸어주어야 할까요? 이렇게 하다보면 모든 함수를 useCallback을 사용할 것 같아서 궁금합니다.
useCallback 이 함수를 메모하는 방법은 두 번째 인자에 전달되는 의존성 배열 내부의 값이 변했을 때인데요. 예시로 들어주신 코드에는 의존성 배열에 아무런 값이 들어있지 않아서 함수의 첫 선언 이후에는 재선언 될 일이 없을 듯 보입니다.
리렌더링을 될것을 생각하면서 useMemo, useCallback, React.memo을 이용해 최적화를 하려니 막막하네요...여러 곳에서 상태가 바뀌면서 어디부분을 최적화 해야할지...
저도 마음 같아서는 모든 페이지의 모든 컴포넌트를 최적화 시키고 싶지만 그러기엔 시간도 체력도 부족해서 막막할 때가 많습니다...ㅎㅎ 그럴 때는 개발된 화면과 코드를 보시면서 어느 부분이 전체 렌더링 프로세스에 있어서 병목을 발생시키는 지 순위를 매겨서 차례대로 최적화를 시키는 게 좋을 듯 합니다!
export const debounce = function () { | ||
let timer; | ||
|
||
return function (func, time) { | ||
clearTimeout(timer); | ||
timer = setTimeout(() => { | ||
func(); | ||
}, time); | ||
}; | ||
}; |
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.
디바운스를 직접 구현하신건 너무 좋지만, 스타일 컴포넌트를 모아놓은 폴더안에 있는건 어딘가 부자연스러운 느낌이 듭니다.
<Money | ||
money={money} | ||
key={money.unit} | ||
index={index} | ||
handleClickMoney={handleClickMoney} | ||
></Money> |
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.
Money 컴포넌트에 children이 들어갈게 아니라면 self closing tag를 사용해도 좋을 것 같습니다.
ProductText, | ||
ButtonCommon, | ||
boxShadowBorderRadi, | ||
} from '../styled-components/util'; |
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.
모듈을 임포트 해올 때 상대경로를 사용하게 되면, 나중에 폴더 구조가 복잡해졌을 때 '../../../../components/menu' 처럼 구문이 지저분해질 수 있습니다! 절대경로에 대한 내용을 찾아보시고 적용하는걸 추천드려요!
${MoneyUnitNumber} | ||
`; | ||
|
||
export default React.memo(Money); |
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.
Money 컴포넌트를 메모이제이션하려고 하셨는데요. React.memo 가 prop을 비교하는 방법에 대해서 공부해보시면 좋을 것 같습니다.
const [walletInfo, setWalletInfo] = useState(null); | ||
const [menuInfo, setMenuInfo] = useState(null); | ||
const [inputMoney, setInputMoney] = useState(0); | ||
const [totalMoney, setTotalMoney] = useState(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.
app.jsx 에서 함수를 만들어서 useContext, props로 함수를 전달하니파일이 커지는 문제가 발생합니다. 함수를 어떻게 파일별로 나누는게 좋을까요?
app.jsx 에서 모든 상태를 관리하려다 보니 생긴 문제인 것 같습니다.
지갑과 메뉴, 돈의 상태를 전역에서 참조하고 수정해야 한다면 context API 를 활용해보시는 것을 추천드립니다.
* 1주차 금 PR 리뷰 반영 및 Router Link 리팩토링 (#17) * Style: 컴포넌트 리스트에 맞는 변수명으로 변경 Related to: #16 * Fix: useEffect의 dependency 수정 Related to: #16 * Refactor: Link 컴포넌트를 NavLink 컴포넌트로 변경 - NavLink의 isActive를 이용해 스타일을 변경함 * LogContext 생성 및, 돈 투입시 log 메세지 출력 기능 구현 (#19) * Feat: 자판기의 Log를 기록하는 LogContext 생성 - 돈 투입시 INSERT와 관련된 리듀서가 동작한다. Related to: #18 * Feat: 돈 입력후 엔터시 투입하는 기능 추가 * Feat: Log가 출력되는 컴포넌트 분리 및 투입 메세지 출력 Related to: #14, #18 * Fix: MoneyContext의 input관련 state를 input 컴포넌트로 이동 - 입력할때마다 리렌더링이 발생해서 state를 input 컴포넌트로 이동함 * Style: 사용하지 않은 키워드 삭제 * 상품 투입 및 구매시 메세지를 보여주도록 구현 (#20) * Feat: 상품 구입시 투입금액 감소 및 구입 메세지 구현 Related to: #12, #14, #18 * Fix: 지갑의 금액보다 큰 금액 입력시 총금액이 투입되는 메세지 추가 * Feat: 상품과 관련된 ProductsContext 추가 - 상품을 선택하면 상품의 수량이 하나씩 소진된다. - 수량이 모두 소진되면 품절처리된다. * Feat: 상품을 선택하면 2초 뒤에 배출되는 메세지 구현 Related to: #12, #14, #18 * Fix: 상품 클릭시 재고가 바로 감소되도록 수정 * Refactor: 금액 투입시 투입된 금액과 개수를 메세지로 출력하도록 수정 Related to: #14 * Chore: github pages 관련 세팅 추가 (#21)
* Test: 불필요한 주석 삭제 * Refactor: useVMTimer 로직 VMTimerProvider로 합치기 issue #13 * Refactor: prop-types 에 object type구체화하기 issue #13 * Refactor: contexts로 폴더명 수정 issue #13 * Design: ProductArea에 버튼 클릭 막는 효과 수정 * Feat: 반환 버튼 클릭 시, 즉시 반환 기능 구현 issue #8 * Feat: 히스토리 젤 하단으로 자동 스크롤 기능 구현 closed issue #14 * Refactor: util에서 delay 함수 삭제 * Design: 지갑 layout 완성 closed issue #10 * Feat: 돈 클릭 시, 수량 감소 이벤트 구현 issue #15 * Feat: 상품 클릭 후 2초동안 재상품 선택 및 투입, 반환 막기 closed issue #16 * Refactor: FinalProvider App으로 이동 * Feat: 지갑에서 돈 선택 시, 히스토리 추가 및 반환 타이머 기능 구현 issue #13 * Fix: 남은 금액이 0원일 때 초기화 closed issue #17 * Feat: useWalletState 생성 * Feat: 금액 입력 시 지갑에 수량 감소하는 기능 구현 issue #8 * Docs: README 작성 * Docs: README 수정 오타 및 비디오 수정 * Refactor: useWalletState 삭제 walletContext로 합쳐서 사용 * Refactor: useHistory 삭제 HistoryContext로 합쳐서 사용 * Refactor: calcPaymentToBeUsed 함수 util에서 삭제 - WalletProvider로 이동 * Rename: util에서 helper로 변경 * Refactor: App에 provider 하나로 reduce * Rename: useVMState jsx 파일로 변경 * Docs: README 수정 - 디렉토리 변경 반영
안녕하세요~ 구디! 2주동안 리뷰 잘 부탁드립니다.
배포
링크
질문
앞으로의 계획은 학습을 하며 코드를 리팩토링하며 최적화하려고 합니다.