[10팀 이송이] [Chapter 1-2] 프레임워크 없이 SPA 만들기 #36
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
과제 체크포인트
기본과제
가상돔을 기반으로 렌더링하기
이벤트 위임
심화 과제
1) Diff 알고리즘 구현
2) 포스트 추가/좋아요 기능 구현
과제 셀프회고
어설프게 알고 있던 VirtualDom에 대하여 자세하게 파헤치며 학습할 수 있어서 좋았습니다. 기본적인 보일러플레이트가 제공되어 시간을 단축할 수 있었지만, 처음부터 구현 했다면 기간 안에 완료하기 쉽지 않았을 것 같습니다.
심화 과제 보다는 순서대로 가상 돔을 구현 해야 하는 기본 과제가 더욱 어렵게 느껴졌습니다.
기본적으로 제가 지키려고 했던 과제의 컨셉(?)과 조건은 아래와 같습니다.
기술적 성장
DOM과 VirtualDOM의 차이에 대해서 알게되었습니다.
VirtualDOM을 구현하는 순서를 정확하게 알게 되었습니다. 또한 각 순서 별 해당 로직이 필요한 이유에 대해 알게 되었습니다!
createVNode > normalizeVNode > createElement > render > diffing > update
특히 노멀라이즈 부분에서 삽질을 하며…. 해당 로직이 필요한 이유와 이점에 대하여 알게되어 좋았습니다.
이벤트 매니저를 구현하며 어떤 타이밍에 요소에 이벤트 위임을 해야할지 고민하며 코드를 작성해 볼 수 있었습니다.
updateElement 함수를 구현하며 기존 노드와 새로운 노드를 비교하여 처리하는 diff 알고리즘을 적용해 볼 수 있어서 좋았습니다.
코드 품질
👍😎 :
WeakMap
적용 - 메모리 관리 최적화와 자동 가비지 컬렉션을 활용하기 위함(
WeakMap
은 키로 사용된 객체가 메모리에서 제거되면, 자동으로 참조가 해제됨)👎🤔 : 요소 업데이트 시 이벤트 위임이 잘 적용되고 있는지.. 이벤트 제거와 추가 로직에 대해 고민이 필요함
Todo: 성능 최적화 , 타입스크립트 적용 등등…..
과제 피드백
리뷰 받고 싶은 내용
저는 이번 게시글 좋아요 기능을 작업하며 Post 컴포넌트(자식 컴포넌트)가 아닌 HomePage(부모 컴포넌트)에서 로직을 구현하여 props로 넘겨주는 방식으로 작업했습니다.
저는 유지보수성과 재사용성을 위해 작은 단위의 컴포넌트에서는 최소한의 로직 또는 UI 구현을 하는 편인데, 이런 식으로 구현해도 될까요? 또한 코치님께서는 어떤 방식을 선호하시는 지와 그 이점이 무엇인지 궁금합니다.