SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Mehr von Daniel Lim

내가 생각하는 개발자란?
내가 생각하는 개발자란?내가 생각하는 개발자란?
내가 생각하는 개발자란?Daniel Lim
 
개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고개발자를 넘어 기술 리더로 가는 길을 읽고
개발자를 넘어 기술 리더로 가는 길을 읽고Daniel Lim
 
스크럼 101
스크럼 101스크럼 101
스크럼 101Daniel Lim
 
nodejs_101.pdf
nodejs_101.pdfnodejs_101.pdf
nodejs_101.pdfDaniel Lim
 
피드백 시스템
피드백 시스템피드백 시스템
피드백 시스템Daniel Lim
 
12.context api
12.context api12.context api
12.context apiDaniel Lim
 
11.react router dom
11.react router dom11.react router dom
11.react router domDaniel Lim
 
9.component style
9.component style9.component style
9.component styleDaniel Lim
 
7.component life cycle
7.component life cycle7.component life cycle
7.component life cycleDaniel Lim
 
6.component repeat
6.component repeat6.component repeat
6.component repeatDaniel Lim
 
3.component 101
3.component 1013.component 101
3.component 101Daniel Lim
 
Swagger? OAS? with NodeJS
Swagger? OAS? with NodeJSSwagger? OAS? with NodeJS
Swagger? OAS? with NodeJSDaniel Lim
 

Mehr von Daniel Lim (20)

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

4.event handling