1. 리액트의 이벤트 처리 방식
리액트에서는 HTML 태그 속성처럼 보이는 방식으로 이벤트를 설정합니다. 예를 들어:
<input
type="text"
id="myNameInput"
value={myName}
onChange={onMyNameChange}
/>
여기서 onChange는 리액트에서 제공하는 이벤트 핸들러 속성입니다. 리액트는 onChange와 같은 속성을 DOM에 직접 바인딩하며, 내부적으로 효율적으로 이벤트를 관리합니다.
주요 차이점:
- HTML 속성처럼 보이지만, JS 함수와 연결됨
- 일반적인 JS: addEventListener('change', 함수)
- React: <input onChange={함수} />
- JSX 문법을 사용하여 컴포넌트에 이벤트 핸들러를 간결하게 지정합니다.
- 이벤트 이름은 카멜 케이스
- 일반적인 JS: onclick, onchange
- React: onClick, onChange
- 이벤트 핸들러는 함수로 지정
- 일반적인 JS: element.addEventListener('click', () => {...});
- React: <button onClick={() => {...}}>Click</button>
2. "이벤트 핸들러"의 의미
이벤트 핸들러는 이벤트 발생 시 실행되는 함수입니다. React에서는 이런 이벤트 핸들러를 onEventName 속성을 통해 전달합니다.
function onMyNameChange(event) {
console.log(event.target.value);
setMyName(event.target.value); // 상태 업데이트
}
위 코드에서 onMyNameChange는 이벤트 핸들러 함수입니다. 이 함수는 onChange 속성으로 전달되어, 해당 이벤트가 발생하면 호출됩니다.
이벤트 핸들러의 특징:
- 특정 이벤트에 반응하는 함수.
- 리액트에서는 컴포넌트에 내장된 속성으로 설정.
- 상태를 업데이트하거나, 동작을 처리하는 역할을 합니다.
3. 리액트와 일반 JS 이벤트 처리 방식의 비교
특징 일반 JS (addEventListener) React (onEventName)구문 형식 | element.addEventListener('click', 함수) | <button onClick={함수}>Click</button> |
이벤트 이름 표기법 | 소문자 (click, change) | 카멜 케이스 (onClick, onChange) |
이벤트 핸들러 연결 방법 | DOM 요소에 직접 추가 | JSX 속성으로 컴포넌트에 추가 |
이벤트 관리 방식 | 브라우저가 관리 | React가 Virtual DOM과 함께 효율적으로 관리 |
4. 이벤트 핸들러의 장점
리액트에서 이벤트 핸들러 방식은 다음과 같은 이점이 있습니다:
- 코드가 더 간결하고 직관적입니다.
- React의 상태(useState)와 쉽게 연결할 수 있습니다.
- Virtual DOM을 통해 성능이 최적화됩니다.
- 동일한 방식을 모든 이벤트에 일관되게 적용할 수 있습니다.
결론
- 리액트에서는 onEventName 속성으로 이벤트를 처리하며, 일반적인 JS의 addEventListener를 대체합니다.
- 이렇게 이벤트를 처리하는 방식은 "이벤트 핸들러"를 활용하는 방식이라고 부를 수 있습니다.
- 이벤트 핸들러는 함수로 정의되며, React 컴포넌트와 상태 관리에 밀접하게 통합됩니다.
즉, 리액트의 이벤트 처리는 "리액트 스타일 이벤트 핸들러"라고 보면 됩니다. 😊
Q2.
원래 이벤트 핸들러 라는 것이 있었던거야?
A2.
"이벤트 핸들러(Event Handler)"라는 개념은 리액트에서 새로 생긴 것이 아니며, 프로그래밍 전반에서 오래전부터 존재했던 개념입니다. 웹 개발에서 특히 많이 사용되며, 리액트는 이를 더 편리하게 사용할 수 있도록 설계한 것일 뿐입니다.
이벤트 핸들러란 무엇인가?
이벤트 핸들러는 특정 이벤트가 발생했을 때 실행되는 함수입니다. "이벤트(Event)"는 사용자의 행동(예: 클릭, 키 입력, 마우스 이동)이나 시스템 상태 변화(예: 로드 완료, 데이터 변경)를 의미합니다. 이벤트 핸들러는 이러한 이벤트를 감지하고 적절히 처리하기 위해 연결된 코드를 의미합니다.
이벤트 핸들러의 역사
1. 순수 JavaScript 시대 (DOM Level 0) 최초의 이벤트 핸들러 방식은 HTML 요소의 속성에 직접 함수나 코드를 작성하는 방식이었습니다.
<button onclick="alert('Hello!')">Click me</button>
여기서 onclick 속성은 이벤트 핸들러입니다. 클릭 이벤트가 발생하면 연결된 코드(alert('Hello!'))가 실행됩니다.
2. JavaScript의 DOM API (addEventListener) HTML 속성 방식이 비효율적이어서, DOM API에서 이벤트 핸들러를 더 효율적으로 관리할 수 있는 메서드가 도입되었습니다: addEventListener.
const button = document.querySelector('button');
button.addEventListener('click', () => {
alert('Hello!');
});
이 방식은 이벤트 핸들러를 자바스크립트 코드 내에서 명시적으로 연결할 수 있게 했으며, 여러 개의 이벤트 핸들러를 동일한 요소에 추가할 수도 있었습니다.
3. jQuery 시대 jQuery는 DOM 이벤트 처리를 더 간편하게 만들어 준 라이브러리입니다. 이벤트 핸들러를 훨씬 간단하게 설정할 수 있었습니다.
$('button').on('click', () => {
alert('Hello!');
});
jQuery는 DOM 요소 선택과 이벤트 연결을 단순화하면서 웹 개발자들에게 큰 인기를 끌었습니다.
4. 리액트와 이벤트 핸들러 React가 등장하면서, 이벤트 핸들러는 JSX의 속성으로 선언하는 방식으로 발전했습니다. DOM 요소의 이벤트와 리액트의 상태 관리를 자연스럽게 연결할 수 있게 되었습니다.
function MyComponent() {
const handleClick = () => {
alert('Hello from React!');
};
return <button onClick={handleClick}>Click me</button>;
}
리액트는 이벤트 핸들러를 HTML 속성처럼 보이게 함으로써 코드 가독성을 높였고, 컴포넌트 기반 구조와 상태 관리에 적합하게 설계되었습니다.
왜 이벤트 핸들러가 중요한가?
이벤트 핸들러는 사용자와 애플리케이션 간의 상호작용을 가능하게 만듭니다. 사용자 행동(예: 버튼 클릭)이나 시스템 변화(예: 데이터 로드)를 기반으로 로직을 실행하거나 상태를 업데이트할 수 있는 핵심 메커니즘입니다.
이벤트 핸들러의 발전
이벤트 핸들러는 웹의 발전과 함께 더 효율적이고 강력한 방법으로 변화해왔습니다:
- HTML 속성 기반 -> 자바스크립트 DOM API (addEventListener) -> jQuery -> React/Angular/Vue 등 현대 프레임워크.
- 이벤트 핸들링의 효율성, 가독성, 상태 관리와의 통합이 점점 개선되었습니다.
결론
"이벤트 핸들러"라는 개념은 자바스크립트가 도입된 초기부터 존재해왔습니다. 리액트는 기존의 이벤트 핸들러 개념을 더 간단하고 효율적으로 사용할 수 있도록 재구성한 것이라고 보면 됩니다. 😊
'언어 및 도구들 공부 > React' 카테고리의 다른 글
HTML - value VS JSX - defaultValue (0) | 2024.11.25 |
---|---|
상태변수와 onChange 이벤트 핸들러조합으로만 써야 하는 경우. (0) | 2024.11.25 |
상태변수를 사용하려 할 때, React.를 생략 가능한 경우 (0) | 2024.11.25 |
리엑트에서 components와 pages에 들어가는 파일들의 차이 (0) | 2024.11.22 |
JSX 안에서 JS 표현식을 쓰기 위한 {} (1) | 2024.11.22 |