지금까지 이벤트 핸들러를 어떻게 사용하는지 배웠습니다. 이제 이벤트 핸들러에 Arguments를 전달하는 방법에 대해서 배워보도록 하겠습니다. 먼저 영어 단어 Argument는 주장, 논쟁, 말다툼이라는 뜻을 갖고 있습니다. 여기에서는 주장이라는 뜻에 더 가까운데, 함수에 주장할 내용 이라고 이해하면 됩니다. 다시 말해서, 함수에 전달할 데이터 를 Arguments라고 하며, 같은 의미로 파라미터(Parameter)라는 용어도 많이 사용합니다. 그리고 우리말로는 매개변수라고 부릅니다.
이벤트 핸들러에 매개변수를 전달해야 하는 경우는 굉장히 많습니다. 예를 들어, 특정 사용자 프로필을 클릭했을 때 해당 사용자의 아이디를 매개변수로 전달해서 정해진 작업을 처리해야 하는 경우를 들 수 있습니다. 어떤식으로 매개변수를 이벤트 핸들러에 전달하는지 먼저 아래 클래스 컴포넌트의 예제 코드를 한 번 보도록 하겠습니다.
<button onClick={(event) => this.deleteItem(id, event)}>삭제하기</button>
<button onClick={this.deleteItem.bind(this, id)}>삭제하기</button>
위 두 줄의 코드는 모두 동일한 역할을 하지만, 하나는 arrow function
을 사용했고 다른 하나는 Function.prototype.bind
를 사용했습니다. 여기에서 나오는 event
라는 매개변수는 리액트의 이벤트 객체를 의미합니다. 여기서 두 가지 경우 모두 첫 번째 매개변수는 id
이고, 두 번째 매개변수로는 event
가 전달됩니다.
첫 번째 arrow function
을 사용한 방법에서는 명시적으로 event
를 두 번째 매개변수로 넣어주었고, 두 번째 Function.prototype.bind
를 사용한 방법에서는 event
가 자동으로 id
이후의 두 번째 매개변수로 전달됩니다.
이렇게 사용하는 방식은 클래스 컴포넌트에서 사용하는 방식이므로 지금은 거의 사용하지 않습니다. 함수 컴포넌트에서는 이벤트 핸들러에 매개변수를 전달할 때 아래와 같이 하면 됩니다. 참고로 여기서 매개변수의 순서는 원하는대로 변경해도 상관없습니다.
function MyButton(props) {
const handleDelete = (id, event) => {
console.log(id, event.target);
};
return (
<button onClick={(event) => handleDelete(1, event)}>삭제하기</button>
);
}
마지막 업데이트: 2025년 08월 27일 05시 33분
이 문서의 저작권은 이인제(소플)에 있습니다. 무단 전재와 무단 복제를 금합니다.
On this page