-
Notifications
You must be signed in to change notification settings - Fork 65
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
[12팀 배성규] [Chapter 1-2] 프레임워크 없이 SPA 만들기 #34
base: main
Are you sure you want to change the base?
Conversation
flat시 인피니티를 사용하지 않으면 1단계만 평탄화되어 손자 컴포넌트가 있는 경우 적용이 안됩니다
Feat : �createVNode
Feat : normalizeVNode
Feat : create element
Feat : 이벤트매니저
Feat/render element
성규님 어제 넘 고생하셨어요 ! 도대체! 왜! eventMap에 데이터가 사라졌을까요... 어디서 사라진건지 아직도 너무 궁금해요🙄 |
정말.. 뭐가 문제여서 값이 사라진건지 슬픕니다🤦♂️ 늦은 시간까지 코드 같이 봐주셔서 정말 감사합니다 ㅎㅎ |
$el.setAttribute("class", value); | ||
} else if (key.startsWith("on")) { | ||
const eventType = key.slice(2).toLowerCase(); // 예: onClick -> click | ||
$el.addEventListener(eventType, value); // 이벤트 핸들러 등록 |
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.
성규님~! 혹시 이벤트 핸들러 등록하는부분을 eventManager 에서 만드신 addEvent함수를 이용하는것에대해서 어떻게생각하시나요??
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.
안녕하세요 성규님-! 김나영 코치입니다.
리뷰해주신 분의 말씀대로 해당 부분은 매니저에서 만들어둔 addEvent를 사용하셔야 현재 fail나는 테스트코드가 해결될 것으로 보입니다. 아마 addEvent에서 Map자료구조에 이벤트가 등록이 되어있다는 가정하에 removeEvent가 동작했을텐데, 직접 요소에서 이벤트가 관리되고 있어 removeEvent로는 제거처리가 되지 않은듯합니다 :)
수정하시면 다른 TC가 아마 깨지실텐데요, 하나씩 풀어나가시면서 리팩토링을 해보시면 좋을 듯 합니다.
고생하셨습니다 :) @pangkyu
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.
과제피드백때 요청하셨던 에러 디버깅 내용 코멘트 남겼습니다.
$el.setAttribute("class", value); | ||
} else if (key.startsWith("on")) { | ||
const eventType = key.slice(2).toLowerCase(); // 예: onClick -> click | ||
$el.addEventListener(eventType, value); // 이벤트 핸들러 등록 |
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.
안녕하세요 성규님-! 김나영 코치입니다.
리뷰해주신 분의 말씀대로 해당 부분은 매니저에서 만들어둔 addEvent를 사용하셔야 현재 fail나는 테스트코드가 해결될 것으로 보입니다. 아마 addEvent에서 Map자료구조에 이벤트가 등록이 되어있다는 가정하에 removeEvent가 동작했을텐데, 직접 요소에서 이벤트가 관리되고 있어 removeEvent로는 제거처리가 되지 않은듯합니다 :)
수정하시면 다른 TC가 아마 깨지실텐데요, 하나씩 풀어나가시면서 리팩토링을 해보시면 좋을 듯 합니다.
고생하셨습니다 :) @pangkyu
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.
과제피드백때 요청하셨던 에러 디버깅 내용 코멘트 남겼습니다.
시간 내주셔서 디버깅도 해주시고 정말 감사합니다ㅠㅠ |
과제 체크포인트
기본과제
가상돔을 기반으로 렌더링하기
이벤트 위임
심화 과제
1) Diff 알고리즘 구현
2) 포스트 추가/좋아요 기능 구현
과제 셀프회고
가상 돔에 대해 성능 개선을 위한 도구로 막연히 알고 있었지만, 이번 발제를 통해 가상 돔이 항상 성능 향상을 보장하지는 않는다는 점을 배울 수 있었습니다.
과제를 통해 vNode 생성, 정규화, 이벤트 매니저 처리 등을 직접 구현하면서 렌더링 과정에 대한 내용을 학습할 수 있었습니다.
비록 테스트 케이스와 구현을 완벽히 완료하지 못해 이번 과제를 통과하지는 못했지만, 발제 내용과 스스로의 학습 과정, 그리고 다른 팀원의 코드를 분석하며 많은 것을 배울 수 있었습니다.
이러한 경험을 통해 가상 돔을 활용한 SPA 구현의 핵심 원리와 그 한계점에 대해 한층 더 이해하게 되었습니다.
기술적 성장
-> 평탄화 작업을 통해 효율적이고 동일하게 렌더링 로직을 처리하기 위해
-> 불필요한 값을 제거하여 일관되고 최적화된 가상 돔 트리를 만들기 위해
학습 효과 분석
과제 구현 시 테스트 케이스가 통과하지 못하여 디버깅으로 문제의 원인을 찾는 과정을 학습했습니다.
그 과정에서 가상 돔에서 어떤 값들이 사용/처리되는 지 확인할 수 있었습니다.
과제 피드백
가상 돔이 동작하는 방식을 직접 구현하는 경험으로 기본적인 동작 이해를 할 수 있었습니다.
u
리뷰 받고 싶은 내용
베이직 테스트 "이벤트 핸들러가 제거되면 더 이상 호출되지 않아야 한다"에서 아래 에러와 함께 통과되지 않는 문제가 있었습니다.
문제점을 찾는 중에
removeEvent
함수에서!eventMap.has(element)
가 조건에 걸려 내용을 수행하지 못하는건가? 라는 생각을 하였습니다.https://github.com/hanghae-plus/front_4th_chapter1-2/blob/99e7430f994d6e3b24fb64a114da5afdba481620/src/lib/eventManager.js
하지만
addEvent()
에서는 정상적으로 추가되는 것을 확인했는데removeEvent()
에서는 어떤 이유 때문에 빈 값으로 들어오고 있었고, 이에 대해 명확하게 문제점을 파악하지 못한 상태입니다.어떤 부분으로 인해 removeEvent()가 정상적으로 호출되지 못한건지에 대한 피드백을 주시면 감사드리겠습니다