목록 보기
React 이벤트와 브라우저 이벤트
프론트엔드

React 이벤트와 브라우저 이벤트

두줄요약

Swiper와 React 이벤트 위임 방식의 차이로 버튼 클릭 전파가 막히지 않는 원인을 분석했습니다.\n상위 React 래퍼에 클릭 핸들러를 두어 합성 이벤트 흐름으로 통일했습니다.

문제 상황

  • Swiper 전체 클릭 시 다음 슬라이드로 이동하는 기능과 슬라이드 내부 버튼 기능의 클릭 충돌
  • 버튼의 stopPropagation 호출 후에도 Swiper 클릭 처리와 슬라이드 이동 발생

원인 분석

  • Swiper React Components의 onClick이 브라우저 click이 아닌 내부 touchend 기반 이벤트로 동작
  • Swiper DOM 요소의 네이티브 이벤트 리스너가 React 루트에 위임된 합성 이벤트보다 먼저 버블 단계에서 실행
  • React 버튼 onClick의 전파 중단 시점이 상위 Swiper 네이티브 리스너 실행 이후인 이벤트 순서

해결 방법

  • 버튼 렌더링 요소에 네이티브 click 리스너를 직접 등록해 상위 Swiper 리스너 전파 차단
  • Swiper를 감싸는 상위 React 요소에 onClick을 등록해 React 합성 이벤트 체계로 통일
  • 유지보수성과 직관성을 고려해 래퍼 React 요소를 추가하는 3안 선택

주의할 점

  • React와 이벤트를 직접 처리하는 외부 라이브러리 조합에서 이벤트 종류와 리스너 등록 위치 확인
  • 캡처 단계 활용은 복잡한 뷰 구조에서 예측하기 어려운 동작 가능성
  • DOM 직접 이벤트 등록 시 등록 이유와 해제 로직 명시 필요

카카오 계열사 채용30건

채용 사이트에서 전체 보기

다음 읽기

#React 주제를 이어서 읽기

React 이벤트와 브라우저 이벤트

React 합성 이벤트와 브라우저 DOM 이벤트의 전파 차이로 Swiper 내부 버튼 클릭이 의도와 다르게 동작하는 사례를 다뤘습니다. 해결책으로 이벤트 부착 위치를 조정해 상위 래퍼에 클릭을 맡기는 방식을 제안했습니다.

카카오엔터테인먼트FE
카카오엔터테인먼트FE
프론트엔드

댓글 0개

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...