ReactJS에서 'onKeyPress'이벤트를 처리하는 방법은 무엇입니까?


215

onKeyPressReactJS 에서 이벤트를 어떻게 작동시킬 수 있습니까? enter (keyCode=13)누를 때 경고해야합니다 .

var Test = React.createClass({
    add: function(event){
        if(event.keyCode == 13){
            alert('Adding....');
        }
    },
    render: function(){
        return(
            <div>
                <input type="text" id="one" onKeyPress={this.add} />    
            </div>
        );
    }
});

React.render(<Test />, document.body);

15
v0.11 부터 React는 키 코드를 읽을 수있는 문자열로 정규화합니다. keyCode 대신 이들을 사용하는 것이 좋습니다.
랜디 모리스

@RandyMorris react는 항상 키 코드를 올바르게 정규화하지는 않습니다. "+"를 생성하면 shiftKey = true 인 키 코드 값 187이 표시되지만 "key"값은 "unidentified"로 해석됩니다.
Herr

답변:


226

React 0.14.7로 작업하고 있으며 사용 onKeyPress하고 event.key잘 작동합니다.

handleKeyPress = (event) => {
  if(event.key === 'Enter'){
    console.log('enter press here! ')
  }
}
render: function(){
     return(
         <div>
           <input type="text" id="one" onKeyPress={this.handleKeyPress} />
        </div>
     );
}

18
그리고 당신은 그것을 테스트로 그것을 시뮬레이션 할 수 있습니다 :Simulate.keyPress(ReactDOM.findDOMNode(component.refs.input),{key:"Enter"});
sylvain

2
실험이란 무엇입니까? ES6 "functionName (param) => {}"에서 작동한다고 생각 했습니까?
Waltari

4
@Waltari ES6 화살표 기능입니다 .function handleKeyPress(event){...}
Haven

2
또한 바인딩this
bhathiya - 페레라

4
아마도 pedantic 일지 모르지만에 대해 엄격한 평등 ===검사 를 사용하는 것이 바람직하다는 점에 주목할 가치가 있습니다 event.key == 'Enter'.
Alexander Nied 2018 년

53
render: function(){
     return(
         <div>
           <input type="text" id="one" onKeyDown={this.add} />
        </div>
     );
}

onKeyDownkeyCode이벤트를 감지 합니다.


11
일반적으로 enter 키는 onKeyUp을 통해 감지됩니다. 사용자가 결정하면 상호 작용을 중지 할 수 있습니다. keyPress 또는 keyDown을 사용하면 즉시 실행됩니다.
Andreas

52

나를 위해 onKeyPresse.keyCode항상 0있지만, e.charCode정확한 값을 가지고있다. 경우 사용 onKeyDown에 올바른 코드를 e.charCode.

var Title = React.createClass({
    handleTest: function(e) {
      if (e.charCode == 13) {
        alert('Enter... (KeyPress, use charCode)');
      }
      if (e.keyCode == 13) {
        alert('Enter... (KeyDown, use keyCode)');
      }
    },
    render: function() {
      return(
        <div>
          <textarea onKeyPress={this.handleTest} />
        </div>
      );
    }
  });

키보드 이벤트 반응 .


9
.. 따라서 화살표 키 및 / 또는 다른 영숫자가 아닌 키를 사용하려는 경우 keyKey가 아니라 keyCode를 반환하므로 onKeyDown이 적합합니다.
oskare

3
React keyEvents 자체를 시험 해보고 싶은 사람들을 위해 여기에 내가 작성한 코드 샌드 박스 가 있습니다.
AlienKevin


10

리 액트는 당신이 생각할만한 종류의 사건을 전달하지 않습니다. 오히려, 그것은 합성 사건을 통과하고 있습니다 .

간단한 테스트에서는 event.keyCode == 0항상 사실입니다. 당신이 원하는 것은event.charCode


이것은 질문에 영향을 미치지 않습니다. Enter를 누를 때 키 코드가 13 인 키코 드는 변경되지 않습니다.
Tequilaman

1
나는 단지 합성 기능을 계속 돌려 e.key || e.keyCode || e.charCode
받습니다

10
var Test = React.createClass({
     add: function(event){
         if(event.key === 'Enter'){
            alert('Adding....');
         }
     },
     render: function(){
        return(
           <div>
            <input type="text" id="one" onKeyPress={(event) => this.add(event)}/>    
          </div>
        );
     }
});

9

동적 입력을 동적 입력 내부의 함수에 전달하려면 다음을 수행하십시오.

<Input 
  onKeyPress={(event) => {
    if (event.key === "Enter") {
      this.doSearch(data.searchParam)
    }
  }}
  placeholder={data.placeholderText} />
/>

이것이 누군가를 돕기를 바랍니다. :)


7

파티에 늦었지만 TypeScript 에서이 작업을 수행하려고 시도했으며 다음을 수행했습니다.

<div onKeyPress={(e: KeyboardEvent<HTMLDivElement>) => console.log(e.key)}

화면에 누른 정확한 키를 인쇄합니다. 따라서 div에 포커스가있을 때 모든 "a"프레스에 응답하려면 e.key를 "a"와 비교합니다. 문자 그대로 if (e.key === "a")입니다.


작동하지 않는 것 같습니다. stackoverflow.com/questions/43503964/…
sdfsdf

5

키 누르기 이벤트와 관련하여 몇 가지 문제가 있습니다. 주요 이벤트에 대한 Jan Wolter의 기사 는 약간 오래되었지만 주요 이벤트 감지가 어려운 이유를 잘 설명합니다.

몇 가지 참고할 사항 :

  1. keyCode, which, charCode의 keyup과를 keyDown에서 키를 누를 때의 의미를 / 다른 값을 가지고있다. 더 이상 사용되지 않지만 주요 브라우저에서는 지원됩니다.
  2. 운영 체제, 물리적 키보드, 브라우저 (버전)는 모두 키 코드 / 값에 영향을 줄 수 있습니다.
  3. key그리고 code최근 표준입니다. 그러나 작성 당시에는 브라우저에서 제대로 지원되지 않습니다.

반응 앱에서 키보드 이벤트를 해결하기 위해 react-keyboard-event-handler를 구현했습니다 . 한번 봐주세요.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.