코드스쿼드 코코아과정 4주차 TIL - Part1
Event Capturing: 이벤트 발생 시 최상위 요소 ➡️ 해당 하위 요소를 찾아 내려가면서 이벤트가 전파되는 과정.
Event Bubbling: 이벤트 발생 시 해당 이벤트가 하위 요소 ➡️ 최상위 요소까지 전파되는 과정.
peer session 코드리뷰를 통해 코드에서 반복되는 부분을 개선해 보았다.
//변경 전
function makeUlTemplate () {
const fruitBasket = document.createElement('ul'); 📌📌📌
fruitBasket.classList.add("fruit-basket");
const template = 📌📌📌
`<li class="fruit">포도</li>
<li class="fruit">사과</li>
<li class="fruit">오렌지</li>
<li class="fruit">바나나</li>
<li class="fruit">키위</li>
<li class="fruit">딸기</li>`
fruitBasket.innerHTML = template;
return fruitBasket; 📌📌📌
}
*바뀐점:
1) <ul>
태그를 동적으로 생성해서 추가하는 대신, HTML에 ul 태그를 추가한 뒤 class명으로 요소를 가지고 왔다.
2) text로 들어간 과일명은 배열(fruitBasket
)로 만들고 forEach
문을 실행해 중복되는 코드를 줄였다. 바뀌는 부분만 배열의 요소를 가지고 와 하나씩 대체해 주었다.
3) innerHTML
자체가 값을 바꿔 렌더링 해주기 때문에 불필요한return
문을 삭제했다.
//변경 후
function makeUlTemplate () {
const fruitBasket = document.querySelector('.fruit-basket'); 📌📌📌
const fruitArr = ["포도", "사과", "오렌지", "바나나", "키위", "딸기"];
let template = '';
fruitArr.forEach(fruit => { 📌📌📌
const innerTemplate = `<li class="fruit">${fruit}</li>`
template += innerTemplate;
})
fruitBasket.innerHTML = template;
}
event 객체를 콜백함수 내에서 사용하기 위해서는 최초에 콜백함수를 호출하는 함수가 event객체를 parameter로 가지고 있어야 한다.
//ex.
function showFruits (event) {
const countOneSecond = setTimeout(makeUlTemplate.bind(null, event), 1000);
//이 때 bind로 '함수를 실행하지 않고' 콜백함수에 event 인자를 넘겨준다.
}
function makeUlTemplate (event) {
removeFruitList(fruitBasket, event);
}
function removeFruitList(parentNode, event) {
console.dir(event.target); //<div>....
}
반복적으로 DOM API 를 사용하는 대신 util을 만들면 중복을 줄일 수 있다.
아래 예시에서는 $
라는 메소드 함수를 만들어 _
에 담는다.
//util 정의
const _ = {
$(cssSelector) {
return document.querySelector(cssSelector);
}
}
//사용
const title = _.$('.fruit_basket');
setInterval()
은 설정한 시간마다 한번씩 반복적으로 실행을 해준다.mousemove
는 굉장히 많이 일어난다.mouseenter
와 mousemove
의 차이를 알고 활용할 줄 알면 애니메이션과 interaction을 제어하는 데에 굉장한 도움이 된다. setTimeout()
으로 해결이 가능.setInterval
과 setTimeout
차이점:setInterval
은 같은 함수가 콜백 큐에 연속적으로 들어온다면 앞에서 기다리고 있던 함수가 사라질 수 있다.setTimeout
을 사용한다면 재귀 호출을 할 수가 있어서 실행이 지연 될 수는 있지만, 실행이 되지 않는 것은 막을 수 있다.setInterval
을 잘 쓰지 않음.setTimeout
으로 재귀호출을 하는 경우가 더 많다. https://www.udemy.com/course/the-complete-javascript-course/learn/lecture/22648965#overview
https://c10106.tistory.com/2166