티스토리 뷰
복사한 값을 테이블 입력 컬럼에 붙여 넣기 하여 데이터가 입력되도록 하는 복사 & 붙여넣기 기능을 추가하다가 문제가 발생했습니다.
keyDown 이벤트에 복사 키(Ctrl+C)를 눌렀을 때 해당 값을 전역 변수로 저장하고, 붙여 넣기 키(Ctrl+V)를 눌렀을 때 현재 컬럼 값이 복사된 타입과 같으면 값을 넣어주는 로직을 추가하여 수정하였습니다.
이렇게 처리하니 해당 페이지에서 복사, 붙여 넣기 하면 정상적으로 동작 하나, 그 외 경우(ex 액셀 데이터, 다른 인터넷 페이지.. )에서 복사한 값을 붙여 넣기 할때 문제가 발생했습니다. (그 외 경우는 다른 페이지이기 때문에 로직을 짠 keyDown 이벤트가 타지 않으므로)
원인을 파악하여 아래와 같이 간단한 예시로 정리해봤습니다.
1. 내 코드의 문제점
위와 같이 window keyDown 이벤트로 복사한 값을 저장하는 변수를 만들어 붙여넣기 기능을 추가했습니다. 이렇게 짜면 본 페이지에서는 정상 동작하지만 다른 페이지에서 복사한 값을 붙여 넣기하면 this.copyData 가 업데이트되지 않아 복사한 값이 아닌 이전에 본 페이지에서 복사한 값으로 들어가게 되는 문제가 발생합니다.
이를 해결하기 위해 인터넷을 검색해보니 paste 이벤트라는 붙여넣기 할 때 호출되는 이벤트를 찾았습니다. paste 이벤트의 특징은 아래와 같습니다.
- 사용자가 브라우저의 사용자 인터페이스를 통해 붙여 넣기를 했을 때 발생합니다.
- 이벤트의 ClipboardEvent.clipboardData 속성에 대해 getData() 메서드를 호출해 클립보드 콘텐츠를 읽을 수 있습니다.
- 데이터 가공 등을 위해 기본 동작을 재정의해야 할 필요가 있는 경우 event.preventDefault()을 호출해 취소하고, 직접 데이터를 삽입하면 됩니다.
2. 개선
위와 같이 paste 이벤트를 통해 붙여넣기 기능을 추가할 수 있습니다. getData() 함수를 통해 복사한 값을 동적으로 가져올 수 있어, 변수화 하여 따로 관리해주지 않아도 되고, 키 이벤트 체크를 하지 않아도 되기 때문에 편한 것 같습니다~
생소한 윈도우 이벤트에 대해서 사용해 볼 때마다 글을 작성하면서 공부해야겠다~
'JavaScript' 카테고리의 다른 글
JS - Lodash ? (3) | 2022.07.04 |
---|---|
JS - async / await 병목 현상 (feat. promise.all) (0) | 2022.05.20 |
JS - 화살표 함수(Arrow function) (0) | 2022.04.22 |
JS - this 란? (0) | 2022.04.21 |
JS - String() 과 toString() (0) | 2022.04.13 |
- Total
- Today
- Yesterday
- programmers
- 렌더링 속도 개선
- 1급 함수
- React로 쓰로틀링 디바운싱 구현
- array
- 자바스크립트 동작원리
- 호이스팅
- next.js 환경변수
- vue
- 매겨변수와 인자
- 함수형 컴포넌트
- 타입스크립트
- 가상스크롤
- rewrites
- react
- 목표 일기
- 1급 객체
- typescript
- redux
- 자바스크립트 비동기 동작원리
- redirects
- useRef
- Next.js
- 시맨틱 웹
- debouncing
- Virtual Scroll
- next.js에 .gitignore가 적용되지 않을 때
- javascript
- 1급 시민
- zustand
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |