반응형
onKeyDown 이벤트가 React의 div에서 작동하지 않습니다.
React의 div에서 keyDown 이벤트를 사용하고 싶습니다. 나는한다:
componentWillMount() {
document.addEventListener("keydown", this.onKeyPressed.bind(this));
}
componentWillUnmount() {
document.removeEventListener("keydown", this.onKeyPressed.bind(this));
}
onKeyPressed(e) {
console.log(e.keyCode);
}
render() {
let player = this.props.boards.dungeons[this.props.boards.currentBoard].player;
return (
<div
className="player"
style={{ position: "absolute" }}
onKeyDown={this.onKeyPressed} // not working
>
<div className="light-circle">
<div className="image-wrapper">
<img src={IMG_URL+player.img} />
</div>
</div>
</div>
)
}
잘 작동하지만 React 스타일로 더 많이하고 싶습니다. 나는 시도했다
onKeyDown={this.onKeyPressed}
구성 요소에. 하지만 반응하지 않습니다. 내가 기억하는 것처럼 입력 요소에서 작동합니다.
어떻게하니?
React의 div에서 onKeyDown 이벤트를 수신 하려면 tabIndex 속성을 사용해야합니다 . tabIndex = "0"을 설정하면 핸들러가 실행됩니다.
이런 식으로 작성해야합니다
<div
className="player"
style={{ position: "absolute" }}
onKeyDown={this.onKeyPressed}
tabIndex="0"
>
에 onKeyPressed
바인딩되지 않은 경우 this
화살표 기능을 사용하여 다시 작성하거나 구성 요소에 바인딩합니다 constructor
.
순수 자바 스크립트에서 너무 많이 생각하고 있습니다. 해당 React 라이프 사이클 메소드에서 리스너를 제거하고 event.key
대신 사용하십시오 event.keyCode
(JS 이벤트 객체가 아니기 때문에 React SyntheticEvent입니다 ). 전체 구성 요소는 이렇게 간단 할 수 있습니다 (생성자에서 메서드를 바인딩하지 않았다고 가정).
onKeyPressed(e) {
console.log(e.key);
}
render() {
let player = this.props.boards.dungeons[this.props.boards.currentBoard].player;
return (
<div
className="player"
style={{ position: "absolute" }}
onKeyDown={(e) => this.onKeyPressed(e)}
>
<div className="light-circle">
<div className="image-wrapper">
<img src={IMG_URL+player.img} />
</div>
</div>
</div>
)
}
참고 URL : https://stackoverflow.com/questions/43503964/onkeydown-event-not-working-on-divs-in-react
반응형
'developer tip' 카테고리의 다른 글
Django 오류 : render_to_response ()에 예기치 않은 키워드 인수 'context_instance'가 있습니다. (0) | 2020.11.27 |
---|---|
Jupyter 노트북에서 IOPub 데이터 속도 초과 (이미지를 볼 때) (0) | 2020.11.27 |
LINQ to XML에서 요소의 전체 복사를 수행하려면 어떻게합니까? (0) | 2020.11.27 |
전 처리기의 C # 매크로 정의 (0) | 2020.11.27 |
Python에서 문자열 대신 datetime으로 sqlite에서 datetime을 다시 읽는 방법은 무엇입니까? (0) | 2020.11.27 |