当前位置: 首页 > 面试题库 >

反应onScroll不起作用

商茂勋
2023-03-14
问题内容

我试图将onscroll事件处理程序添加到特定的dom元素。看下面的代码:

class ScrollingApp extends React.Component {
    ...
    _handleScroll(ev) {
        console.log("Scrolling!");
    }
    componentDidMount() {
        this.refs.list.addEventListener('scroll', this._handleScroll);
    }
    componentWillUnmount() {
        this.refs.list.removeEventListener('scroll', this._handleScroll);
    }
    render() {
        return (
            <div ref="list">
                {
                    this.props.items.map( (item) => {
                        return (<Item item={item} />);
                    })
                }
            </div>
        );
    }
}

代码非常简单,如您所见,我想处理div#list滚动。当我运行此示例时,它不起作用。所以我尝试直接在render方法上绑定this._handleScroll,它也不起作用。

<div ref="list" onScroll={this._handleScroll.bind(this)> ... </div>

因此,我打开了chrome inspector,直接使用以下命令添加了onscroll事件:

document.getElementById('#list').addEventListener('scroll', ...);

它正在工作!我不知道为什么会这样。这是React的错误还是什么?还是错过了什么?任何设备将不胜感激。


问题答案:

问题的根源this.refs.list是React组件,而不是DOM节点。要获取具有addEventListener()方法的DOM元素,您需要调用ReactDOM.findDOMNode()

class ScrollingApp extends React.Component {

    _handleScroll(ev) {
        console.log("Scrolling!");
    }
    componentDidMount() {
        const list = ReactDOM.findDOMNode(this.refs.list)
        list.addEventListener('scroll', this._handleScroll);
    }
    componentWillUnmount() {
        const list = ReactDOM.findDOMNode(this.refs.list)
        list.removeEventListener('scroll', this._handleScroll);
    }
    /* .... */
}


 类似资料:
  • 问题内容: 为什么colspan属性在React中不起作用?我创建了呈现以下内容的简单组件: 编辑:解决 这是解决方案。React期望属性名称为 colSpan ,而不是colspan。在浪费了荒谬的时间去发现这个小小的邪恶事实之后,想出了这一点。 问题答案: 来自React的DOM差异文档: 所有DOM属性和属性(包括事件处理程序)都应包含驼峰,以与标准JavaScript样式保持一致。 如果您

  • 问题内容: 我是新来的人,我想做出反应并尝试使用内联样式获取背景图片。但这不起作用。 显示错误“ URL未定义” 问题答案: CSS值始终是字符串。将值用引号引起来,使其成为字符串:

  • 问题内容: 我正在尝试使用TableView组件的onScroll事件侦听器: FXML: Java控制器: 但这不起作用!我做错了什么? 我需要捕获垂直滚动器以手动控制滚动位置并根据向下或向上滚动获取相关数据。 谢谢大家! 问题答案: 我认为可能发生的情况是TableView包含的自身正在消耗scroll事件并在内部对其进行处理,因此它永远不会到达您的应用程序处理程序。 最初,我认为您可能要使用

  • 大家好,我正在与RN一起学习一个简单的聊天应用程序 我在服务器代码中检查了连接与连接事件的连接服务器也可以获取我的套接字ID 但是,任何发射或开启都不起作用。 这是我的服务器代码 这是客户端代码 有了这段代码,当我按下按钮时,我认为socket.on在服务器上工作 此外,当套接字在服务器中连接时,客户端会更改渲染中的文本。 但两者都不起作用。 请帮帮我...

  • 我遇到了一个奇怪的问题。在我的反应原生应用程序中,如果我将事件设置为,它不会被触发,但如果我将相同的设置为中的,它会被触发。我在这里错过了什么? 为什么会这样?这是React Native的问题吗?我使用的是0.43版。

  • 问题内容: 我正在尝试学习react.js,但被困在“ Hello World”脚本中。 我的index.html: 和src / helloworld.js: 当我把这个代码里面的文件,它工作正常,但是当我将其移动到单独的文件中我得到的空白页,并控制台错误: 怎么了 问题答案: 您收到该错误的原因是: 您已经从本地文件系统(例如通过双击)加载了,而不是通过Web服务器加载了 JSX转换器是脚本的