2016-09-05 17 views
11

テーブルにonScrollイベントを追加しようとしています。反応コンポーネントにスクロールイベントを追加する方法

componentDidMount() { 
    ReactDOM.findDOMNode(this.refs.table).addEventListener('scroll', this.listenScrollEvent); 
} 

componentWillUnmount() { 
    ReactDOM.findDOMNode(this.refs.table).removeEventListener('scroll', this.listenScrollEvent); 
} 

listenScrollEvent() { 
    console.log('Scroll event detected!'); 
} 

render() { 
    return (
     <table ref="table"> 
      [...] 
     </table> 
    ) 
} 

を私はconsole.log(ReactDOM.findDOMNode(this.refs.table))を試してみましたが、私は正しい結果を取得していますが、スクロールイベントが全く解雇されることはありません:これは私が試したものです。私はhereを見ましたが、それでも失敗しました。どんな援助も非常に高く評価されます。あなたは、コンテキスト内の要素にこれをバインドする必要がありhttps://jsfiddle.net/81Lujabv/

+0

表の内容が表の境界を超えていますか?それはスクロールしません。 – Andreyco

+0

コンテナにはテーブルがフレーム内にあることを意味する 'overflow:auto'があります(正しい場合)。私は 'window.addEventListener'を使用したくないです。 –

+0

テーブルに' display:block'を追加してみてください。 –

答えて

2

あなたはonScroll属性を使用することができます。あなたはaddEventListenerにそれを渡すとき

render() { 
    return (
     <table ref="table" onScroll={this.listenScrollEvent.bind(this)}> 
      [...] 
     </table> 
    ) 
} 
+0

動作しません:( –

+0

私は、要素にonScrollイベントを入れても反応しないと思ったのですか?o_0 –

+0

私の例を見てください:https://jsfiddle.net/81Lujabv/ –

6

:ここ

listenScrollEvent() { 
    console.log('Scroll event detected!'); 
} 

render() { 
    return (
     <table onScroll={this.listenScrollEvent}> 
      [...] 
     </table> 
    ) 
} 

は一例です。

+3

あなたは、コンポーネントを作成するためのES6クラスを使用する場合 –

+0

私はすでに、コンストラクタでやったが、まだ動作しません 'コンストラクタ(小道具){スーパー(小道具);?。。this.listenScrollEvent = this.listenScrollEvent .bind(this);} ' –

+0

これは一般的に便利ですが、元の質問の' listenScrollEvent'メソッドは 'this'と何もしません結合することは実際には必要ありません。 – Jules

-1

これ試してみては、this.listenScrollEvent.bind(this)を追加しました。

componentDidMount() { 
     ReactDOM.findDOMNode(this.refs.table).addEventListener('scroll', this.listenScrollEvent.bind(this)); 
    } 

    componentWillUnmount() { 
     ReactDOM.findDOMNode(this.refs.table).removeEventListener('scroll', this.listenScrollEvent.bind(this)); 
    } 

    listenScrollEvent() { 
     console.log('Scroll event detected!'); 
    } 

    render() { 
     return (
      <table ref="table"> 
       [...] 
      </table> 
     ) 
    } 
関連する問題