Vue.js 이벤트 핸들링 이해하기
이 문서에서는 Vue.js에서 DOM 이벤트를 듣고 반응하는 방법을 소개합니다. 이벤트를 감지하고 처리하는 기본적인 방법부터 고급 기술까지 다룹니다.
기본 이벤트 핸들링
Vue에서 이벤트를 감지하기 위해 사용하는 v-on
지시자는 일반적으로 @
기호로 축약하여 사용됩니다. 예를 들어, 클릭 이벤트를 감지하려면 다음과 같이 작성할 수 있습니다:
<button @click="handler">Click me</button>
이벤트 핸들러 유형
인라인 핸들러 (Inline handlers):
- 이벤트가 발생할 때 직접적으로 실행되는 간단한 자바스크립트 코드입니다. 예:html
<button @click="count++">Add 1</button>
- 이벤트가 발생할 때 직접적으로 실행되는 간단한 자바스크립트 코드입니다. 예:
메소드 핸들러 (Method handlers):
보다 복잡한 로직을 컴포넌트의 메소드를 통해 처리합니다. 예:
javascriptconst name = ref("Vue.js"); function greet(event) { alert(`Hello ${name.value}!`); if (event) { alert(event.target.tagName); } }
html<button @click="greet">Greet</button>
메소드와 인라인 핸들러의 차이
- 메소드 핸들러는 주로 복잡한 이벤트 로직을 관리하는 데 사용됩니다. 템플릿 컴파일러는 메소드 핸들러를 JavaScript 식별자 또는 속성 접근 경로로 인식합니다.
- 인라인 핸들러는 간단한 연산이나 메소드 호출에 적합합니다. 직접적인 동작을 실행할 때 유용합니다.
이벤트 수정자 (Event Modifiers)
Vue는 이벤트 핸들링을 간소화하기 위한 여러 수정자를 제공합니다. 수정자는 v-on
지시자에 점으로 연결된 접미사입니다.
.stop
: 이벤트 전파를 중지합니다..prevent
: 이벤트의 기본 행동을 방지합니다..capture
: 캡처 모드에서 이벤트 리스너를 추가합니다..self
: 이벤트가 해당 요소에서 발생했을 때만 핸들러를 실행합니다..once
: 이벤트를 한 번만 처리합니다..passive
: 리스너를 등록할 때{ passive: true }
를 사용합니다.
<!-- 클릭 이벤트의 전파를 중지하고, 기본 동작도 방지합니다. -->
<a @click.stop.prevent="doThat"></a>
키 수정자 (Key Modifiers)
특정 키 이벤트에만 반응하도록 할 때 사용합니다. 예를 들어, Enter 키를 눌렀을 때만 함수를 호출하려면 다음과 같이 작성합니다:
<input @keyup.enter="submit" />
시스템 수정자 키
Ctrl, Alt, Shift, Meta와 같은 시스템 수정자 키 (System Modifier Keys)는 특정 시스템 키가 눌려있을 때만 이벤트 리스너가 반응하도록 설정합니다. 예를 들어:
<!-- Ctrl 키와 함께 클릭할 경우에만 작동 -->
<div @click.ctrl="doSomething">Do something</div>
마우스 버튼 수정자 (Mouse Button Modifiers)
마우스 버튼 수정자를 사용하면 특정 마우스 버튼에 의해 트리거된 이벤트에만 핸들러가 반응하도록 설정할 수 있습니다.
.left
: 왼쪽 버튼.right
: 오른쪽 버튼.middle
: 휠 버튼
예시:
<!-- 오른쪽 마우스 버튼 클릭 시 작동 -->
<button @click.right="onRightClick">Right Click</button>
정확한 수정자 (The .exact Modifier)
.exact
수정자는 이벤트를 발생시키는 데 정확한 조합의 시스템 수정자가 필요할 때 사용됩니다.
<!-- Ctrl 키가 눌린 상태에서 정확하게 해당 버튼 클릭 시만 작동 -->
<button @click.ctrl.exact="onCtrlClick">Ctrl + Click</button>
주요 키 별칭 (Key Aliases)
Vue는 가장 자주 사용되는 몇몇 키에 대한 별칭을 제공합니다:
.enter
.tab
.delete
(Delete 및 Backspace 키 모두 캡처).esc
.space
.up
.down
.left
.right
이러한 별칭을 사용하여 입력, 버튼 등의 요소에서 특정 키 이벤트를 쉽게 핸들링할 수 있습니다.
<!-- Enter 키를 누를 때 submit 함수 호출 -->
<input @keyup.enter="submit" />
결론
Vue.js의 v-on
지시자와 다양한 이벤트 및 키 수정자를 사용하여, 웹 애플리케이션의 사용자 인터랙션을 효과적으로 관리할 수 있습니다. 초보자는 이 기본적인 예제들을 통해 Vue.js에서의 이벤트 핸들링 방법을 쉽게 익힐 수 있습니다. 이벤트 처리 로직을 컴포넌트의 메소드로 분리하고, 수정자를 사용하여 코드를 간결하고 명확하게 유지하는 것이 좋습니다.