我如何能使onKeyPress事件工作在ReactJS?当按下回车键(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);

当前回答

我正在使用React 0.14.7,使用onKeyPress和事件。钥匙工作得很好。

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

其他回答

React不会传递给您您可能认为的那种事件。相反,它是传递合成事件。

在一个简短的测试中,事件。keyCode == 0总是true。你需要的是event.charCode

我正在使用React 0.14.7,使用onKeyPress和事件。钥匙工作得很好。

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

通过访问window元素,这对我来说是有效的

useEffect(() => {
    window.addEventListener('keypress', e => {
      console.log(e.key)
    });
  }, []);

有一些挑战,当涉及到按键事件。Jan Wolter关于关键事件的文章有点老了,但很好地解释了为什么关键事件检测很难。

有几件事需要注意:

keyCode,其中,charCode有不同的值/含义在按键从keyup和keydown。它们都被弃用了,但在主流浏览器中是受支持的。 操作系统、物理键盘、浏览器(版本)都可能对键代码/值产生影响。 密钥和代码是最新的标准。但是,在撰写本文时,浏览器还没有很好地支持它们。

为了在react应用程序中处理键盘事件,我实现了react-keyboard-event-handler。请看一看。

来晚了,但我试图在TypeScript中完成这个,并想出了这个:

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

这将打印按到屏幕上的精确键。因此,如果你想在div聚焦时响应所有的“a”键,你可以将e.key与“a”进行比较——字面意思是if(e。Key === "a")。