如何在react组件中添加scroll事件

Lor*_*ris 17 javascript ecmascript-6 reactjs

我正在尝试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>
    )
}
Run Code Online (Sandbox Code Playgroud)

我试过console.log(ReactDOM.findDOMNode(this.refs.table)),我得到了正确的结果,但滚动事件从来没有被解雇过.我在这里看了但仍然失败了.任何帮助都会非常感激.

Har*_*uja 8

您需要将其绑定到上下文中的元素.

render() {
    return (
        <table ref="table" onScroll={this.listenScrollEvent.bind(this)}>
           [...]
        </table>
    )
}
Run Code Online (Sandbox Code Playgroud)

  • 如果使用ES6 Class创建组件. (3认同)

Ant*_*kov 6

您可以使用onScroll属性:

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

render() {
    return (
        <table onScroll={this.listenScrollEvent}>
           [...]
        </table>
    )
}
Run Code Online (Sandbox Code Playgroud)

这是一个例子:https : //jsfiddle.net/81Lujabv/


tla*_*eca 6

我想做类似的事情。将事件侦听器添加到窗口而不是 ReactDom.findDOMNode 对我有用......

componentDidMount() {
    window.addEventListener('scroll', this.handleScrollToElement);
}

componentWillUnmount() {
    window.removeEventListener('scroll', this.handleScrollToElement);
}

handleScrollToElement(event) {
    console.log('Fired ' + event)
}
Run Code Online (Sandbox Code Playgroud)