2016-09-05 4 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, но все еще не смог. Любая помощь будет так высоко оценена.

+0

Является ли содержимое таблицы переполненными границами таблиц? Это не так, он не будет прокручиваться. – Andreyco

+0

контейнер имеет «переполнение: авто», что означает, что таблица находится внутри рамки (если я прав). Я не хочу использовать 'window.addEventListener' –

+0

попробуйте добавить' display: block' в таблицу. –

ответ

2

Вы можете использовать onScroll атрибут:

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

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

Вот пример: https://jsfiddle.net/81Lujabv/

+0

Не работает :( –

+0

Я думал, что событие 'onScroll' на элементе не включено в ответ? O_0 –

+0

Посмотрите на мой пример: https://jsfiddle.net/81Lujabv/ –

6

Вы должны связать это с элементом в контексте.

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

Если вы используете ES6 Class для создания компонента –

+0

Я уже делал в конструкторе, но все еще не работает. 'Constructor (props) {super (props); this.listenScrollEvent = this.listenScrollEvent .bind (this);} ' –

+0

Хотя это вообще полезно, обратите внимание, что метод' listenScrollEvent' в исходном вопросе ничего не делает с 'this' s o привязка фактически не нужна. – Jules

-1

Дайте этому попытку, добавил .bind(this) к this.listenScrollEvent, когда вы передаете его addEventListener.

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> 
     ) 
    } 
Смежные вопросы