티스토리 뷰
[자바스크립트] 이벤트 중복 현상 / 등록된 이벤트 리스터 확인하기 getEventListeners / 등록된 이벤트 지우기 removeEventListeners
첸첸 2023. 9. 5. 15:03
JSP에서 Thymeleaf로 옮겨가면서 채팅메세지가 중복으로 오는 현상이 발생했다.
채팅 내용을 받기 위해 message 이벤트를 등록하고 messageHandler 함수를 호출하게끔 개발이 되어있었다.
중복으로 메세지가 오는 것의 원인은 채팅 페이지를 열 때 마다 이벤트가 등록이 되었기 때문이다.
window.addEventListener('message', messageHandler);
window 객체가 변경 되는 것은 일반적으로 페이지 전환 또는 새로운 브라우저 창을 열 때 발생하는데 SPA에서는 페이지를 새로 로드하지 않고 콘텐츠만을 변경하므로 window객체는 그대로 유지된다.
따라서, 채팅이 있는 페이지를 여러면 열면, 연 만큼 window.addEventListener가 호출 되어 이벤트가 중복으로 등록이 되었다.
따라서, 다른 페이지로 이동을 하는 경우에는 등록 된 이벤트를 제거를 해주어야 한다.
👉등록 된 이벤트 확인
getEventListeners(객체)
나는 window 객체에 이벤트를 걸었기 때문에 getEventListeners(window)를 호출했다.
해당 함수를 호출하는 경우 아래처럼 이벤트 타입이 key값으로 된 객체를 리턴 받는 것을 확인 할 수 있다.
나의 경우에는 message 타입의 이벤트가 2개가 등록 되어 Array로 표시되었다.
👉등록 된 이벤트 제거하기
removeEventListener(type, listener)
removeEventListener(type, listener, options)
removeEventListener(type, listener, useCapture)
이벤트를 제거하기 위해, 타입가 listener를 함께 넘겨주면 된다.
👉예시
1️⃣ 이벤트 등록
- 테스트를 위해 testHandler()를 만들고 이벤트를 등록해주었다.
function testHandler() {
console.log("test")
};
window.addEventListener('message', testHandler)
2️⃣ 등록 확인
- getEventListeners(window)로 등록된 이벤트 확인시 아래처럼 등록 된 것을 확인 할 수 있다.
getEventListeners(window)
3️⃣이벤트 제거
window.removeEventListener('message', testHandler)
4️⃣이벤트 제거 확인
- 다시 확인해보면 등록된 이벤트가 2개이고, testHandler를 listener로 가지는 이벤트가 사라진 걸 확인 할 수 있다.
getEventListeners(window)
'프론트엔드 > javascript' 카테고리의 다른 글
[자바스크립트] contextPath 확인하기/ axios 요청 시 "/"유무 차이점 알아보기 (0) | 2023.09.05 |
---|---|
자바스크립트 이벤트 연속으로 발생시키기 | dispatchEvent (0) | 2022.08.01 |
자바스크립트 Array 순서 변경하기 | 구조 분해 할당 (0) | 2022.07.29 |
async/await 반복문에서 사용하기 (0) | 2022.05.17 |
더블클릭시 일반클릭 이벤트 실행 막기 (0) | 2022.04.13 |
- Total
- Today
- Yesterday
- 전자정부프레임워크
- 아파치카프카
- 쿠버네티스
- 오토에버코테
- springboot
- javascript
- java
- softeer
- 자바코테
- Linux
- 자바스크립트
- mysql
- 리액트
- java 코테
- 코딩테스트
- 자바
- 현대코테
- 톰캣
- Spring
- react
- Docker
- 코테
- 스프링
- 현대오토에버
- centos
- Kubernetes
- tomcat
- softeer java
- 현대
- 도커
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |