-
Notifications
You must be signed in to change notification settings - Fork 77
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
[13팀 김유진] [Chapter 1-1] 프레임워크 없이 SPA 만들기 #46
base: main
Are you sure you want to change the base?
Conversation
export const Header = () => { | ||
const isLogin = UserStore.getValue("isLogin"); | ||
const isHashMode = () => window.location.pathname.endsWith("hash.html"); | ||
|
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.
isHashMode가 함수가 아니라면 초기에 값이 결정되니까 그때그때 감지할 수 있도록 실행을 위임한거같은데
나중에 더 복잡한 상황에서 실행을 위임할 수 있는 부분이 큰 도움이 될꺼같아요!!!!
if (e.target.id === "login-form") { | ||
handleSubmit(e); | ||
} | ||
}); |
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.
SPA에서 라우팅이 변경될때 😁
removeEventListener를 만들어 주는 방식으로
클린업도 고민해보시면 좋을꺼같아요!
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.
코드에서 함수의 역할을 분리하고 하드코딩을 줄이려고 많이 노력하신 것 같습니다. 코드보면서 놓친 부분 많이 배울 수 있었습니다. 이번 주 고생 많으셨습니다!
|
||
// 클린업 함수 반환 | ||
return () => { | ||
window.removeEventListener("hashchange", handleRouteChange); |
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.
저는 구현하면서 이벤트를 삭제할 생각은 못했었는데 유진님 코드 보고 찾아보니, 이벤트리스너가 많이 쌓이는 경우 성능 저하나 의도하지 않은 이펙트가 발생할 수 있다고 하네요! 다음에는 저도 적절하게 리스너 해제하는 연습을 해봐야겠습니다
path: "/", | ||
name: "홈", | ||
id: "home", | ||
isShow: true, |
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.
isShow 좋네여 👍
try { | ||
localStorage.clear(); | ||
} catch (error) { | ||
console.log(error); | ||
} |
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.
clear 에서는 굳이 catch 할 필요는 없을 것 같아유
resolve: { | ||
alias: { | ||
"@components": path.resolve(__dirname, "./src/components"), | ||
"@constants": path.resolve(__dirname, "./src/constants"), | ||
"@pages": path.resolve(__dirname, "./src/pages"), | ||
"@routes": path.resolve(__dirname, "./src/routes"), | ||
"@services": path.resolve(__dirname, "./src/services"), | ||
"@stores": path.resolve(__dirname, "./src/stores"), | ||
"@utils": path.resolve(__dirname, "./src/utils"), | ||
}, | ||
}, |
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.
엇 요거 vite-tsconfig-paths 라는 플러그인이 비슷한 역할을 해서 추천드리구 갑니다.. 총총..
과제 체크포인트
기본과제
1) 라우팅 구현:
2) 사용자 관리 기능:
3) 프로필 페이지 구현:
4) 컴포넌트 기반 구조 설계:
5) 상태 관리 초기 구현:
6) 이벤트 처리 및 DOM 조작:
7) 라우팅 예외 처리:
심화과제
1) 해시 라우터 구현
2) 라우트 가드 구현
3) 이벤트 위임
과제 셀프회고
발제와 함께 주신 자료들을 복사해가며 순차적으로 진행하다가 지금보다 더 나은 구조 설계가 필요해 보여 두 번정도 코드를 리셋하고 시작하면서 느낀 건 과제를 구현하기 전에 어떻게 구현할지에 대한 생각을 조금 더 깊게 하고 시작해야 뿌리부터 차근차근 단단하게 만들어갈 수 있겠다는 생각을 했습니다. 기본부터 심화까지 오류를 해결해나가는 과정이 정말 어려웠고 그만큼 재밌었어요.
기술적 성장
코드 품질
학습 효과 분석
리뷰 받고 싶은 내용
routes/index.js에는 해시모드 여부에 따라 다르게 처리하는 부분을 남겨 놓고 main.hash.js에서 main.js를 임포트 하니까 모든 테스트 전부 통과 하더라고요. 근데 오류는 해결했지만 사실 main.js랑 main.hash.js에서 다른 라우터를 임포트 하게 전부 구현을 했는데 왜 e2e 테스트에서만 통과가 안됐는지 이해가 잘 안가서 리뷰를 받아보고 싶습니다!