React 이벤트 처리하기 (함수 컴포넌트 ver)
1. 소문자 대신 캐멀케이스(camelCase)를 사용
- 지키지 않으면 문법적으로 오류. 작동하지 않는다.
- 기존 html
<button onclick="?"></button>
<button onClick={?}></button>
2. 이벤트핸들러 전달방식
<button onclick="testTest()"></button>
<button onClick={ testTest }></button>
<input name="username" onChange={ onCheck } placeholder ="이름" />
const onCheck = (e) => {
console.log(e.target);
console.log(e.target.name);
}
3. 이벤트 전파를 중단하는 법
1) event.preventDefault()
현재 이벤트의 default 동작만 중단한다. (예를들면 <a>태그의 경우, 클릭하면 명시된 href로 이동하는 것이 default 동작이다)
상위로 이벤트 전파는 막지 않는다.
2) event.stopPropagation()
현재 이벤트 동작만 실행한다. (단, 해당요소에 여러개의 이벤트을 걸어놨다면, 해당요소에 있는 다른 이벤트들의 동작은 막지 X)
현재 이벤트가 상위로 bubbling 혹은 capturing 되는 것을 막는다. 즉, 상위로 이벤트 전파를 막는다.
3) event.stopImmediatePropagation()
현재 이벤트 동작만 실행한다. (+ 해당요소에 여러개의 이벤트을 걸어놨다면, 해당요소에 있는 다른 이벤트들의 동작까지 모두 막는다)
현재 이벤트가 상위로 bubbling 혹은 capturing 되는 것을 막는다. 즉, 상위로 이벤트 전파를 막는다.
4) return false; ---> React, JS addEventListener(non-jQuery 일때) 사용 불가능!
jQuery event handler의 경우는, stopPropagation()과 preventDefault()을 모두 수행한 것과 같고.
그 외의 handler 경우(non-jQuery)에서는, onclick handler에 사용했을 경우에 preventDefault()를 수행한 것과 같다.
<a href="url이 들어있다고 가정" onclick="testTest()"> 테스트 </a>
function testTest() {
alert("안녕하세요");
return false;
}
<a href="url이 들어있다고 가정" onClick={ testTest }> 테스트 </a>
function testTest(e) {
e.preventDefault();
alert("안녕하세요");
}
import React, {useState} from "react"
const Banner = () => {
function tenPercent() {
alert("10% 할인 쿠폰에 당첨 되었습니다.")
}
const [ visible, setVisible ] = useState(true);
function bannerHide(e) {
e.stopPropagation();
setVisible(false);
};
return visible && (
<div onClick={ tenPercent }>
이 곳을 클릭해서 쿠폰을 받아가세요.
<button onClick={ bannerHide }> 닫기 </button>
</div>
);
};
export default Banner;