티스토리 뷰
원하는 기능을 구현하기 위하여 syntheticEvent를 체크하던 중 싹 한 번 정리했으면 좋겠다는 생각이 들어 포스팅을 작성한다.
syntheticEvent는 한국말로 하면 합성 이벤트라는 뜻인데, 왜 react syntheticEvent가 생겨났을까?
이벤트 핸들러는 (사실 이벤트 핸들러 뿐 만 아니라 다른 것들도) 브라우저마다 이름이나 처리 방식등이 조금씩 다르다. 어떠한 브라우저에서 잘 동작하던 기능이 다른 브라우저에서는 오류나는 것이 그 이유이다. 이를 해결하기 위하여 리액트에서는 브라우저마다 서로 다른 이벤트를 모아 하나의 합성 이벤트로 제공해준다. 즉, 합성 이벤트를 사용하면 모든 브라우저에서 동일하게 동작하기 때문에 크로스 브라우징 문제를 해결할 수 있게된다.
즉, 다양한 브라우저들에서 일관된 속성을 가지도록 이벤트를 정의하는 것이다.
참고로 리액트에서 제공하는 합성 이벤트는 W3C에 따라 정의하지만 그 의미가 대응을 의미하지는 않는다. 예를 들어 합성 이벤트 중 onMouseLeave는 event.nativeEvent는 mouseout을 의미한다.
Clipboard 이벤트
onCopy onCut onPaste
Composition 이벤트
input 입력 시, 사용
onCompositionEnd onCompositionStart onCompositionUpdate
Keyboard 이벤트
onKeyDown onKeyPress onKeyUp
Focus 이벤트
form 뿐 만 아니라 모든 DOM element에 사용 가능
onFocus onBlur
Form 이벤트
onChange onInput onInvalid onReset onSubmit
Generic 이벤트
image나 body 등에만 사용되는 것 같은데, 어떤 글들을 보면 div에서도 된다고 한다. 테스트 결과 나는 div에서 실행되지는 않는다. 근데 또 image를 위한 이벤트가 따로 있는걸 보니 되어야 하는 것 같기도...
onError onLoad
Mouse 이벤트
onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter onDragExit onDragLeave onDragOver onDragStart onDrop onMouseDown onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp
Pointer 이벤트
포인터 이벤트는 Chrome, Firefox, Edge, IE에서 지원되며, 이 외 브라우저에서는 폴리필을 추가하여야 하다.
onPointerDown onPointerMove onPointerUp onPointerCancel onGotPointerCapture onLostPointerCapture onPointerEnter onPointerLeave onPointerOver onPointerOut
Selection 이벤트
onSelect
Touch 이벤트
onTouchCancel onTouchEnd onTouchMove onTouchStart
UI 이벤트
react 17부터 onScroll 이벤트는 버블링 되지 않는데, 엘리먼트가 중첩된 상황에서 가질 수 있는 혼동을 막을 수 있다.
onScroll
Wheel 이벤트
onWheel
Media 이벤트
onAbort onCanPlay onCanPlayThrough onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting
Image 이벤트
onLoad onError
Animation 이벤트
onAnimationStart onAnimationEnd onAnimationIteration
Transition 이벤트
onTransitionEnd
기타 이벤트
onToggle
'JavaScript > react' 카테고리의 다른 글
[React Context Api] 리액트에서 데이터를 자유롭게 주고받는 법. (0) | 2022.05.30 |
---|---|
리액트 코드 분할과 방법을 소개합니다 (dynamic, lazy 등) (0) | 2022.05.25 |
react query : 리액트쿼리가 대체 무엇인가요? 왜 필요하죠? (0) | 2022.05.08 |
리액트 온라인 코드 편집기 (0) | 2022.04.20 |
react creat-react-app 설치, eslintrc.js 통해 eslint 설정하기 (0) | 2022.04.07 |
- Total
- Today
- Yesterday
- js
- 프론트앤드
- reacthook
- BFCache
- TIL
- npm
- frontend
- javascript
- 리코일
- 센트리모니터링
- storybookUI
- 크롬
- gitRebase
- 프론트엔드
- 센트리
- react
- 사파리
- 깃
- 리액트
- js테스트
- 리액트상태관리
- Git
- 리액트훅
- vue
- CSS
- 김민태
- 모바일사파리
- 자바스크립트
- 깃명령어
- sentry
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |