2016-08-01 12 views
0

私はアプリケーションにキーボードショートカットを追加するためにreact-keydownライブラリを使用していますが、内部ダイアログコンポーネントでは動作させることはできません。ダイアログは常に表示されているわけではありませんが、キーが表示されているときにそのキーが機能することを期待しています。 は私がevent_handlers.js._onKeyDown(イベント)方法を取得していますが、欠損値で:未定義FN =、 FN一方で装飾された機能が含まれている必要があります。react-keydownを使用して内部コンポーネントのkeydownイベントをキャッチ

<Container> 
    <MyDialog> 
     <material-ui-dialog/> 
    </MyDialog> 
</Container> 

Container.js:

import keydown from 'react-keydown' 
class Container extends Component { 
    @keydown('enter') 
    someMethod1(){ 
     // working 
    } 
    render() { 
     return (
     <div> 
      <MyDialog/> 
     </div> 
    ) 
    } 
} 

MyDialog.js:

私のコンポーネントがどのように見えるコメントにあなたの説明に基づいて

import keydown, {keydownScoped} from 'react-keydown' 
@keydown('enter') 
class MyDialog extends Component { 
    @keydownScoped('enter') 
    someMethod3(){ 
     // not working 
    } 
} 
+0

可視かどうかを判断するロジックは何ですか?また、フォームフィールドにフォーカスしたときにキーバインドメソッドをトリガーしようとしていないことを確認できますか? – glortho

+0

ダイアログが常に表示されるとは限りません。これは、コンポーネント内の他のアクションによってトリガされる確認ダイアログ(マテリアルUIダイアログを含む)です。コンポーネントには入力フィールドやテキスト領域はなく、ok/cancelボタン付きのダイアログのみです。 – user1813302

+0

表示されていなくてもマウントされていますか?問題は、すでにマウントされているが隠されていて、ダイアログコンポーネントの範囲外にあるコンポーネントをクリックまたはタブすると、キーバインドが応答しなくなるということです。 – glortho

答えて

0

、問題が表示されますにあなたのDialogコンポーネントがマウントされてフォーカスが失われるようにして、その中のキーバインドがキーストロークを受け取らないようにするs。

1)Dialogコンポーネントの祖先であり、フォーカスを失うことのないコンポーネントをデコレートすることによって、キーバインドの範囲を拡張します。極端な場合、これはアプリのルートコンポーネントになる可能性があります。次に、希望のDialogコンポーネントメソッドをkeydownScopedで飾ります。そのメソッドの中で、現在のダイアログがアクティブなものであることを確認するために小道具を調べます。

2)このhttps://github.com/glortho/react-keydown/issues/28の行に沿ってダイアログキーバインドをプログラムでアクティブにします。

希望に役立ちます!

関連する問題