SlideShare a Scribd company logo
ReactEventHandling
임광규
2020.ReactJS 1
이벤트사용시주의사항
이벤트이름은카멜표기법으로작성
onclick=>onClick,onkeyup=>onKeyUp
이벤트에실행할자바스크립트코드를전달하는것이아니라함수형태의값을전달
<button onClick={() => {console.log('클릭')}} />
DOM요소만이벤트를설정할수있음
MyComponent에onClick값을설정하면클릭할때실행하는것이아니라전달만함
<MyComponent onClick={doSometing} />
컴포넌ㅌ자체적으로이벤트설정불가단,전달받은props를내부이벤트로설정
<div onClick={props.doSometing}>{/* {...} */}</div>
2020.ReactJS 2
React에서지원하는이벤트종류
SyntheticEvent
이벤트핸들러는크로스브라우저래퍼인 SyntheticEvent 를전달받습니다.이벤트는모든
브라우저에서동작하는점을제외하면,기본이벤트와동일한인터페이스를가집니다.
ClipboardEvents CompositionEvents KeyboardEvents FocusEvents
FormEvents GenericEvents MouseEvents PointerEvents
SelectionEvents TouchEvents UIEvents WheelEvents
MediaEvents ImageEvents AnimationEvents TransitionEvents
OtherEvents
2020.ReactJS 3
이벤트사용예시-1
비동기적으로이벤트속성을참조하고싶다면이벤트객체의 event.persist() 를호출하세
요.이벤트풀에서제거되고사용자의코드에서참조가가능해집니다.
function onClick(event) {
console.log(event); // => nullified object.
console.log(event.type); // => "click"
const eventType = event.type; // => "click"
setTimeout(function() {
// 만약 event.persist(); 를 호출했다면 null 이 아님
console.log(event.type); // => null
console.log(eventType); // => "click"
}, 0);
}
2020.ReactJS 4
event.persist()
비동기처리시네이티브이벤트와다르게동작하는이유는,
리액트의SyntheticEvent는 객체 풀링(Object Pooling) 방식을사용하기때문입니다.
매이벤트마다사용되는객체를 Object Pooling 을사용하여 객체 생성 시간을 줄이고 GC에 대한
노출을 줄여서 메모리관리에소비되는시간을줄이는방식을사용합니다.때문에객체가호출되고난
후에이벤트속성이초기화됩니다.
이로인해비동기로호출하였을경우에는해당객체가비어있는현상이발생합니다.
하지만 event.persist() 를호출하게되면사용하고있던이벤트풀(EventPool)에서제거되고
사용자코드로사용이됩니다.
2020.ReactJS 5
이벤트사용예시-2
state에input값담기
import React from 'react';
export default () => {
const [name, setName] = React.useState("");
return <div>
<input type="text" name="name" value={name} onChange={e=>setName(e.target.value)}>
</div>;
}
2020.ReactJS 6
이벤트사용예시-3
여러개의input관리
import React from 'react';
export default () => {
const [state, setState] = React.useState({name:"", age:""});
const handleChange = (e) => {
setState({
...state,
[e.target.name]: e.target.value // 이부분이 핵심!
});
}
return <div>
<input type="text" name="name" onChange={handleChange}>
<input type="text" name="age" onChange={handleChange}>
</div>;
}
2020.ReactJS 7
뽀나스
e.stopPropagation(),e.preventDefault()차이
e.preventDefault() 는고유동작을중단시키고, e.stopPropagation() 는상위엘리먼트들
로의이벤트전파를중단시킨다.
2020.ReactJS 8
e.stopPropagation()
<div class="first-cover">
<ul class="second-cover">
<li class="third-cover">
<div class="last-el">event</div>
</li>
</ul>
</div>
$(".last-el").click(function(e){
e.stopPropagation();
alert("last-el");
});
$(".third-cover").click(function(){
alert("third-cover");
});
$(".second-cover").click(function(){
alert("second-cover");
});
2020.ReactJS 9
e.preventDefault()
preventDefault()를사용해서올바르지않은텍스트가입력란에입력되는것을막음
<input type="text" onkeypress="checkName(event);"/>
function checkName(evt) {
var charCode = evt.charCode;
if (charCode != 0) {
if (charCode < 97 || charCode > 122) {
evt.preventDefault();
alert("소문자만 입력할 수 있습니다." + "n"
+ "charCode: " + charCode + "n"
);
}
}
}
2020.ReactJS 10
참고자료
SyntheticEvent
[개념잡기]e.preventDefault()와stopPropagation()의차이
2020.ReactJS 11

More Related Content

PPTX
Ngui3 5 5_example_3_chatwindow
PPTX
자바기말프로젝트Ppt
PDF
동국대 앱창작터 2일차:Cocos2d-X 기본기능
PDF
How jQuery event works
PDF
Coded ui가이드
PDF
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
PDF
9주 dom & event advanced
PDF
9주 DOM & Event Advanced
Ngui3 5 5_example_3_chatwindow
자바기말프로젝트Ppt
동국대 앱창작터 2일차:Cocos2d-X 기본기능
How jQuery event works
Coded ui가이드
Flappy bird 만들기 세미나 자료(유니티 4.3버전)
9주 dom & event advanced
9주 DOM & Event Advanced

More from Daniel Lim (20)

PDF
내가 생각하는 개발자란?
PDF
개발자를 넘어 기술 리더로 가는 길을 읽고
PDF
스크럼 101
PDF
nodejs_101.pdf
PDF
For You
PPTX
Nest js 101
PPTX
피드백 시스템
PDF
13.code split
PDF
12.context api
PDF
11.react router dom
PDF
9.component style
PDF
7.component life cycle
PDF
8.hooks
PDF
6.component repeat
PDF
5.ref 101
PDF
3.component 101
PDF
2.jsx 101
PDF
1.react 101
PDF
Swagger? OAS? with NodeJS
PDF
CuKu V1.3
내가 생각하는 개발자란?
개발자를 넘어 기술 리더로 가는 길을 읽고
스크럼 101
nodejs_101.pdf
For You
Nest js 101
피드백 시스템
13.code split
12.context api
11.react router dom
9.component style
7.component life cycle
8.hooks
6.component repeat
5.ref 101
3.component 101
2.jsx 101
1.react 101
Swagger? OAS? with NodeJS
CuKu V1.3
Ad

4.event handling