-
[Javascript] 이벤트의 실행순서 파악하기 (onMouseDown은 onClick보다 먼저 실행된다 👻)웹 개발 2024. 12. 21. 00:02
프론트엔드 개발을 할 때 많이 사용되는 이벤트들이 있다.
그중에 onClick 이벤트가 있는데, onClick은 사용자가 마우스로 무언가를 클릭했을 때 이벤트가 발생하도록 하는 것이다.
다만, onClick 이외에도 또 다른 마우스 클릭 관련 이벤트들이 있고, 때로는 더 섬세한 동작을 위해서 onMouseDown, onMouseUp과 같은 이벤트들을 사용할 수 있다.

여기서, 더 생각해볼만한 점은 이 셋이 모두 한번에 사용되었을 때이다.
세 개의 이벤트는 어떤 순서로 동작할까?
사용자가 UI 요소와 상호작용할 때 마우스 이벤트가 실행되는 일반적인 순서는 다음과 같다.
- onMouseDown
사용자가 마우스 버튼을 누를 때 발생한다. - onMouseUp
사용자가 마우스 버튼을 놓을 때 발생한다. - onClick
마우스 버튼이 이동하거나 너무 오래 눌리지 않은 경우 onMouseDown과 onMouseUp이 완료된 후 발생한다.
실제로 순서대로 작동하는지, React를 사용한 예제를 통해서 확인해보자 🙌
"use client"; const MouseEventTest = () => { const logEvent = (eventName: string) => { console.log(eventName); }; return ( <div> <h1>MouseEventTest</h1> <button onMouseDown={() => logEvent("MouseDown")} onMouseUp={() => logEvent("MouseUp")} onClick={() => logEvent("Click")} > Click Me </button> </div> ); }; export default MouseEventTest;위의 예제를 실행해보면 !

위와 같이 로그가 남는것을 확인할 수 있다.
이벤트가 순서대로 실행되는 것을 알 수 있다.
(mouse up이 click보다 먼저 실행된다.)
이런 마우스의 이벤트를 활용해서 동기적으로 실행되는 로직들을 설정할 수 있다.
다음과 같은 React 예제를 살펴보자.
"use client"; import { useState } from "react"; const MouseEventOrderTest = () => { const [allowClick, setAllowClick] = useState(false); const handleMouseDown = () => { console.log("MouseDown"); setAllowClick(true); // 마우스를 눌렀을 때 클릭 허용 }; const handleMouseUp = () => { console.log("MouseUp"); setTimeout(() => setAllowClick(false), 100); // 짧은 지연 후 상태 초기화 }; const handleClick = () => { if (allowClick) { console.log("Click"); } else { console.log("Click blocked"); } }; return ( <button onMouseDown={handleMouseDown} onMouseUp={handleMouseUp} onClick={handleClick} > Controlled Click </button> ); }; export default MouseEventOrderTest;위의 예제는 handleClick 내부의 로직을 보호할 수 있도록 작성해봤다.
실제로는 더 꼼꼼한 로직이 필요하겠지만, 마우스 버튼을 누른 순간 handleClick 이벤트가 활성화되고, 누른 상태에서 마우스를 뗀 순간 아주 잠깐의 100ms 동안만 클릭을 활성화함으로써, 클릭을 마구 눌렀을 때 handleClick 이벤트가 너무 많이 호출되는 것을 막는 코드이다.
💧 생각해보면 더 많은 쓸모가 있을 수 있겠지만, 간단한 예제를 통해 이런 이벤트를 알아보았다.
만약, 타인이 만든 Button 컴포넌트를 사용할 때, 이벤트를 컨트롤하기 어려울 경우도 있는데 이런 경우에는 다양한 마우스 이벤트들을 사용하여 적절하게 로직의 서순을 조정할 수 있다.
+ 마우스를 주로 예시를 들었지만, 키보드도 마우스처럼 유사하게 서순을 가지고 있다.
키보드 이벤트 실행 순서
- onKeyDown
키가 눌릴 때 발생한다. - onKeyPress (Deprecated)
(더 이상 권장되지 않음) 키가 문자 값을 생성하는 경우 onKeyDown 후 발생한다. - onKeyUp
키를 놓을 때 발생한다.
'웹 개발' 카테고리의 다른 글
FE 개발에서 Single Source of Truth (SSOT) 알아보기 👍 (0) 2025.01.02 FE 검색 구현에서 검색어와 타겟의 유사성 체크하기 - 레벤슈타인 거리 (Levenshtein Distance) ♥️ With 타입스크립트 (1) 2024.12.28 [javascript 안전한 이벤트] event.isTrusted를 활용해 이벤트 보안과 무결성 지키기 (1) 2024.12.01 bfcache를 사용하면, 브라우저 속도 최적화를 할 수 있다 ! 👻 (1) 2024.11.20 resize Event와 ResizeObserver 비교해보기 🙌 (0) 2024.10.18 - onMouseDown