
멘토님/코드리뷰 조원분들의 답변
- CDN 방식은 실제 프로덕트에선 사용이 잘 되지 않습니다.
그 이유는 여러가지 있겠으나, CDN 방식은 트리쉐이킹이 잘 되지 않습니다.
또한 저희 네트워크와는 무관하게 CDN의 네트워크에 문제가 있을때 저희 프로젝트에 영향을 줄 수 있습니다.(외부 네트워크에 취약)- 아래 반복되는 부분 리팩토링 과정을 보여주셨습니다.
- 코드가 길어지는 부분은 진입점에서 추가되어있는 목록을 불러오고 그 목록과 함께 수정/삭제 버튼 생성과 이벤트 리스너를 함께 작성하면서 createElement/append를 반복하다보니 구조가 명확히 보이지 않는 점이 조금 아쉽다고 생각했었는데, 조원분께서 이벤트 위임에 대해 말씀해주셨습니다.
// 기존
export function handleSortBy(e) {
if (sortBy.value === '') {
todoList.querySelectorAll('li').forEach((e) => {
e.style.display = 'flex';
});
return;
} else if (sortBy.value === 'true') {
todoList.querySelectorAll('li').forEach((e) => {
if (!e.classList.contains('done')) {
e.style.display = 'none';
} else {
e.style.display = 'flex';
}
});
} else {
todoList.querySelectorAll('li').forEach((e) => {
if (e.classList.contains('done')) {
e.style.display = 'none';
} else {
e.style.display = 'flex';
}
});
}
}
const todoFilter = (callback) => todoList.querySelectorAll("li").forEach(callback);
const hideTodo = (todo) => (todo.style.display = "none");
const showTodo = (todo) => (todo.style.display = "flex");
export function handleSortBy(e) {
if (sortBy.value === "") {
return todoFilter((e) => showTodo(e));
}
if (sortBy.value === "true") {
return todoFilter((e) => {
if (!e.classList.contains("done")) return hideTodo(e);
else showTodo(e);
});
}
return todoFilter((e) => {
if (e.classList.contains("done")) return hideTodo(e);
else showTodo(e);
});
}
오오! 이렇게 시리즈별로 나눠서 프로젝트 TIL을 쓰면 나중에 깃허브 리드미에도 기재할 수 있고 엄청 좋을 것 같아요!! 한 수 배웁니당 ㅎㅎ