이벤트 수식어 event 전달인자 관련 질문
136
39 asked
안녕하세요~
1번은 전달한 인자를 그대로 함수에서 받아서 의문이 안생기는데,
2번은 인자를 전달하지 않았는데, 함수에서는 event 인자를 받네요? event 인자는 자동으로 사용가능한 개념인지요?
답변 주시면 감사하겠습니다~
1.
전달 한 인자를 함수에서 그대로 받음
printEventInfo('text', $event)
printEventInfo(message, event)
2.
인자를 전달하지 않았는데 함수에서는
event를 인자로 받음
@keyup="onKeyupHandler"
onKeyupHandler(event)
on
<template>
<button @click="printEventInfo('text',$event)">inline event handler</button>
<input type="text" @keyup="onKeyupHandler"/>
</template><script>
export default{
const printEventInfo=(message, event)=>{
console.log(message)
console.log(event.target)
console.log(event.target.tagName)
}
const onKeyupHandler=(event)=>{
console.log(event.key)
}
}
</script>
Answer 1
0
안녕하세요 질문에 답변 드리기 전에 해당 질문은 Vue 문법이기 전에 자바스크립트 함수 전달 및 호출 방식의 차이이기에 이점을 먼저 말씀드리고 설명하도록 하겠습니다.
자바스크립트의 함수 전달과 실행의 차이를 상세한 예제로 설명드리겠습니다.
1. 일반적인 함수 전달과 실행의 차이
// 1. 함수 정의
const greeting = (name) => console.log(`Hello ${name}`);
// 함수 직접 실행
greeting('John'); // 출력: Hello John
// 함수 전달의 예
const people = ['John', 'Jane', 'Mike'];
// forEach에 함수 자체를 전달
people.forEach(greeting); // 출력: Hello John, Hello Jane, Hello Mike
// 함수를 직접 실행하는 경우
people.forEach((name) => greeting(name)); // 위와 동일2. 이벤트 핸들링에서의 실제 예제
// HTML
// <button id="btn1">직접 실행 버튼</button>
// <button id="btn2">함수 전달 버튼</button>
// <input id="input1" type="text">
// 1. 이벤트 핸들러 함수들
const printEventInfo = (message, event) => {
console.log('메시지:', message);
console.log('이벤트 타겟:', event.target);
console.log('태그이름:', event.target.tagName);
};
const onKeyupHandler = (event) => {
console.log('입력된 키:', event.key);
console.log('이벤트 타겟:', event.target);
};
// 2. 함수를 직접 실행하는 방식
const btn1 = document.querySelector('#btn1');
btn1.addEventListener('click', (event) => {
printEventInfo('버튼1 클릭됨', event);
});
// 3. 함수 자체를 전달하는 방식
const btn2 = document.querySelector('#btn2');
btn2.addEventListener('click', function(event) {
console.log('이벤트 객체 자동 전달됨:', event);
});
const input1 = document.querySelector('#input1');
input1.addEventListener('keyup', onKeyupHandler); // 이벤트 객체 자동 전달3. 이것이 Vue에서는 이렇게 표현됩니다
<template>
<!-- 1. 함수 직접 실행 방식 -->
<button @click="printEventInfo('버튼1 클릭됨', $event)">직접 실행 버튼</button>
<!-- 2. 함수 전달 방식 -->
<button @click="onClickHandler">함수 전달 버튼</button>
<input @keyup="onKeyupHandler" type="text">
</template>
<script>
export default {
methods: {
printEventInfo(message, event) {
console.log('메시지:', message);
console.log('이벤트 타겟:', event.target);
console.log('태그이름:', event.target.tagName);
},
onClickHandler(event) { // 이벤트 객체 자동 전달
console.log('이벤트 객체 자동 전달됨:', event);
},
onKeyupHandler(event) { // 이벤트 객체 자동 전달
console.log('입력된 키:', event.key);
console.log('이벤트 타겟:', event.target);
}
}
}
</script>이처럼 Vue의 이벤트 핸들링은 자바스크립트의 기본적인 함수 전달 방식을 그대로 따르고 있습니다:
함수를 직접 실행할 때는 필요한 인자를 모두 명시적으로 전달해야 합니다
함수 자체를 전달할 때는 브라우저가 이벤트 발생 시 자동으로 이벤트 객체를 첫 번째 인자로 전달합니다
이러한 개념은 자바스크립트의 기본 동작이며, Vue는 이를 더 편리한 문법으로 제공하는 것뿐입니다.
npm init vue@3.1.9
0
36
2
크롭 웹스토어 vue devtools 설치 관련
0
38
1
snippets 작성하는 부분 설명이 있었나요?
0
47
2
computed 의 set 함수를 통해 const 변수에 값을 담는 부분
0
52
2
소스 공유 어디서 해야하는지 궁금합니다
0
60
2
component 등록과 사용
0
57
2
강의교안
0
56
2
eslint 룰 관련 질문이 있습니다.
0
63
2
npm init -y 명령어 실행에 관한 질문
0
153
2
volar 가 마켓플레이스에 검색되지 않아 vue(official)을 설치했습니다.
0
167
2
깊은 감시자 질문
0
88
2
정리된 내용
0
153
2
화면이 왜 이렇게 뜨는걸까요?
0
184
2
왜 다르게 뜰까요..?ㅠㅠ
0
155
2
npm init vue , npm create vue@latest 명령 오류
0
289
2
강의를 듣다보니 궁금한 점 질문드립니다.
0
141
2
watch강의 질문
0
153
1
강의 듣다가 질문드립니다.
0
119
1
이벤트 처리 부분 강의 실습
0
140
2
v-pre는 설명이 없나요?
0
152
2
AppCard.vue 만들다 말고 오류가 갑자기 엄청 뜹니다
0
146
1
개발자도구 Vue 탭 관련 문의
0
240
2
강의를 인텔리제이로 수업따라가도 되져?
0
177
2
API 사용시 자동으로 import하는 기능은 어떤것을 설치해야 하나요?
3
274
2

