Vanilla JavaScript
DOM 의 네이티브 이벤트 시스템과 직접 상호 작용
이벤트 이름에 소문자를 사용 (ex , 'click')
이벤트 처리기를 요소에 직접 할당 (addEventListener)
document.getElementById('myButton').addEventListener('click', () => {
console.log('Button Click!');
});
React
네이티브 브라우저 이벤트를 래핑하는
합성 이벤트 시스템을 통해 DOM 의 이벤트를 추상화
브라우저에서 일관된 인터페이스가 제공
이벤트는 소문자가 아닌 카멜 표기법을 사용하여 명명 (ex , 'handleClick')
문자열이 아닌 이벤트 핸들러로 함수 전달
function MyComponent() {
// 'event' here is a React SyntheticEvent
const handleClick = (event) => {
console.log('Button clicked!');
};
return <button onClick={handleClick}>Click me</button>;
}
그런데
이벤트를 래핑하는 합성 이벤트 시스템 ?
DOM 의 이벤트를 추상화 브라우저에서 일관된 인터페이스 ?
React SyntheticEvent
Event 속성 액세스
const handleChange = (e) => {
console.log(e.target.value);
}
Event Pooling
React 17은 합성 이벤트 풀링을 중지, 이벤트 처리가 더 단순화
Event Deligation
// 자식 요소에 접근
const handleChange = (e) => {
console.log(e.target.dataset.id);
}
<ul>
<li data-id="1">Item 1</li>
<li data-id="2">Item 2</li>
</ul>
Event 동작 사용자 정의
const handleSubmit = (e) => {
e.preventDefault();
// more ...
}
추가 인수 전달
const handleSubmit = (itemId, e) => {
console.log("Item Id : ", itemId)
}
<button onClick={(event) => handleItemClick(1, event)}>Item 1</button>
<button onClick={handleItemClick.bind(this, 2)}>Item 1</button>
지원되는 이벤트