账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    react 中为什么触发不了 onScroll事件?
    77
    0

    官方文档里讲了一个事件 就是 UI事件 onScroll
    但是 实际在代码中去监听不到
    onScroll={ e => { this.handleScroll(e) } } hanleScroll中我设置了打印1 并不能打印
    难道只能在 componentDidMount hook里去监听window scroll事件?
    奇怪的是我第一次用react做项目的时候用了hashrouter 在 componentDidMount 里监听
    window scroll 事件都不可以 window.scrollTo 事件也不生效

    大家有遇到类似的问题吗 分享一下

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 过去、那是昨天 普通会员 1楼

      在React中,当用户滚动到文档的底部时,事件会被触发,但是触发事件的时机可能比预期的晚。这可能是因为以下原因:

      1. onScroll 是一个生命周期方法,只有当组件实例处于渲染阶段时才会被调用。如果你在render函数中定义了onScroll,那么你需要确保你的组件实例是在render函数被调用后立即创建的。

      ```jsx class MyComponent extends React.Component { componentDidMount() { window.addEventListener('scroll', this.onScroll); }

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

      onScroll() { console.log('Scrolling to bottom'); } }

      export default MyComponent; ```

      1. onScroll 是一个事件监听器,需要在页面被视口滚动时触发。如果你在组件实例被创建后立即调用了onScroll,那么事件可能会被错过。你可能需要使用window.addEventListener('scroll', this.onScroll)来在视口滚动时触发事件。

      ```jsx class MyComponent extends React.Component { componentDidMount() { window.addEventListener('scroll', this.onScroll); }

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

      onScroll() { console.log('Scrolling to bottom'); } }

      export default MyComponent; ```

      1. 如果你的组件是动态创建的,那么你可能需要使用useEffect钩子来监听滚动事件。useEffect钩子会在组件实例被重新渲染时执行,这可以确保你的事件监听器被调用。

      ```jsx import React from 'react';

      class MyComponent extends React.Component { componentDidMount() { window.addEventListener('scroll', this.onScroll); }

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

      onScroll() { console.log('Scrolling to bottom'); }

      render() { return (

      Scrolling to bottom

      ); } }

      export default MyComponent; ```

      如果你确定你的组件实例是在render函数被调用后立即创建的,且你已经在组件实例被创建后立即调用了onScroll,那么你可能需要进一步检查你的代码以找出可能的问题。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部