2017-01-20 7 views
0

ReactJSで自分のページのイベントリスナーを追加しようとしています。私はcomponentDidMount()に追加しました。しかし、最初のページの読み込みのためだけにトリガされます。hashChangeのイベントリスナー

アドレスバーに変更があった場合は、どのようにトリガーすることができますか。

componentDidMount:function(){ 

     window.addEventListener("hashchange", console.log('hashchange1')); 
     $(window).bind("hashchange", console.log('$ - hashchange')); 
     window.onhashchange = console.log('hashchange3');  
     ReactDOM.findDOMNode(this).addEventListener('hashChange',console.log('ReactDOM - hashchange')); 
    }, 

私はそれを動作させるためにいくつかの異なる方法を試しましたが、それらはすべて最初の負荷でのみ動作します。私は間違って何をしていますか?

ありがとうございました。

答えて

2

すべての場合にconsole.logを実行し、その戻り値をリスナーとして追加するだけです。それはES5を使用して、より明白に見えるようにする

window.addEventListener("hashchange", e => console.log('hashchange1', window.location.hash)); 

https://jsfiddle.net/ku6okrp2/

EDIT:あなたは、たとえば、イベントリスナーとしての機能を渡す必要があり、私が見

window.addEventListener("hashchange", function(e){ 
    console.log('hashchange1', window.location.hash) 
}); 
+0

ああ、私はしませんでしたそれを正しく理解する。それにもかかわらず、関数(console.log)が呼び出されると思っていましたが、イベントが必要だと思います。ありがとう。 – fractal5

+0

@ fractal5 'console.log'をイベントリスナーとして渡すことができます。他の関数と同じように、実行しなければ' window.addEventListener( "hashchange"、console.log); 'https:// jsfiddle .net/ku6okrp2/1 / – pawel