アクティブな反応を閉じるためにバインドしたいbootstrapポップオーバーescape
を押します。ここにコードがあります
_handleEscKey:function(event){
console.log(event);
if(event.keyCode == 27){
this.state.activePopover.hide();
}
},
componentWillMount:function(){
BannerDataStore.addChangeListener(this._onchange);
document.addEventListener("click", this._handleDocumentClick, false);
document.addEventListener("keyPress", this._handleEscKey, false);
},
componentWillUnmount: function() {
BannerDataStore.removeChangeListener(this._onchange);
document.removeEventListener("click", this._handleDocumentClick, false);
document.removeEventListener("keyPress", this._handleEscKey, false);
},
しかし、キーを押してもコンソールに何も記録されません。私もそれをウィンドウでさまざまなケースで聞いてみました。「キープレス」、「キーアップ」など、私は何か間違ったことをしているようです。
私自身も同様の問題を抱えていました。コードを使用して修正を説明します。
// for other devs who might not know keyCodes
var ESCAPE_KEY = 27;
_handleKeyDown = (event) => {
switch( event.keyCode ) {
case ESCAPE_KEY:
this.state.activePopover.hide();
break;
default:
break;
}
},
// componentWillMount deprecated in React 16.3
componentDidMount(){
BannerDataStore.addChangeListener(this._onchange);
document.addEventListener("click", this._handleDocumentClick, false);
document.addEventListener("keydown", this._handleKeyDown);
},
componentWillUnmount() {
BannerDataStore.removeChangeListener(this._onchange);
document.removeEventListener("click", this._handleDocumentClick, false);
document.removeEventListener("keydown", this._handleKeyDown);
},
CreateClassの方法を使用しているため、定義された各メソッドでthis
が暗黙的に指定されているため、特定のメソッドにバインドする必要はありません。
Reactコンポーネント作成のcreateClassメソッドを使用して、動作するjsfiddleがあります here。
タブ可能なdivについても同じ要件がありました。
私の次のコードは、items.map((item)=> ...
<div
tabindex="0"
onClick={()=> update(item.id)}
onKeyDown={()=> update(item.id)}
>
{renderItem(item)}
</div>
これは私のために働いた!