염딩코

[JavaScript] 자식 컴포넌트의 클릭 이벤트 (feat. event.stopPropagation()) 본문

Front-End/Javascript

[JavaScript] 자식 컴포넌트의 클릭 이벤트 (feat. event.stopPropagation())

johnyeom 2024. 5. 22. 17:39

 

Hi there~

다들 잘 지내고 계신가요??😃

저는 최근에 졸업작품을 마무리하고 프로젝트의 기능들을 하나씩 리팩토링하는 과정에 있습니다 :)

 

 

 

최근에 밋팀 메인페이지에 필터 기능을 구현하던 중 특이한 현상을 마주했습니다..! OMG..!!

 

이상현상 발견!!!

 

제가 원하는 모습은 삭제버튼을 눌러도 드롭다운 창이 닫히지 않는 것이었어요!!

하지만,,, 닫혔죠?

어떡하지?

 

구글링을 하던 중 저와 비슷한 상황을 겪으신 분을 발견했어요!!!

 

stopPropagation() 이라는 메서드를 통해서 해결할 수 있었습니다 😁

 

저의 코드는 현재 아래와 같은 구조를 띄고 있어요.

부모 컴포넌트의 wrapper에서 클릭 이벤트가 발생하면 창을 닫고 열도록 구현이 되어있고,

이 이벤트는 자식 컴포넌트들에게 전파가 되죠.

 

자식 컴포넌트 1에서는 아무런 문제가 없지만,

자식 컴포넌트 2에서는 클릭했을 때, 창이 닫히지 않도록 해야했어요!

이때, Event.stopPropagation() 메서드를 사용하면 

현재 이벤트가 캡처링,버블링 단계에서 더 이상 전파되지 않도록 방지합니다.

 

그 결과

Yeah~~🎉🎉

 

 

하지만, 역시 tradeoff가 있었습니다..

 

 

 

웹 서비스의 분석을 위해 거의 필수적으로 사용되는 웹 애널리틱스 도구에서는 종종 이벤트 버블링을 활용하여 이벤트를 감지하고 데이터를 수집하는데

stopPropagation을 사용하면 이벤트 버블링이 막혀 해당 도구가 클릭을 감지하지 못할 수 있는 문제가 생깁니다...!

 

아래의 참고자료를 바탕으로 리팩토링 단계에서 수정을 해봐야겠어요!!

 

 

참고자료

부모 요소의 클릭 이벤트를 자식 요소에서 무효화시키려면?

공식문서: Event.stopPropagation()

Event.stopPropagation()을 왠만하면 사용하지 않아야 하는 이유