reactjs - 如何在当前组件中使用 handleScroll?
问题描述
我想为我的组件设置handleScroll事件,但是我当前的代码是在我移动浏览器窗口的滚动时触发的,我希望在我移动组件的滚动时触发它,我该怎么办?
import classNames from 'classnames'
import { useEffect, useState } from 'react'
const Header = _ => {
const [ scrolled, setScrolled ] = useState()
const classes = classNames('header', {
scrolled: scrolled,
})
useEffect(_ => {
const handleScroll = _ => {
console.log(11111)
}
window.addEventListener('scroll', handleScroll)
return _ => {
window.removeEventListener('scroll', handleScroll)
}
}, [])
return (
<TableBody>
{lis.map((l, i) => (
<Rows
key={i}
/>
))}
</TableBody>
)
}
export default Header
解决方案
您正在窗口而不是组件上添加滚动侦听器事件。
您可以使用 React 的onScroll
事件而不是addEventListener
手动附加到您的 Header 元素。
...
const handleScroll = _ => {
console.log(11111)
}
return (
<div onScroll={handleScroll}>
<TableBody>
{lis.map((l, i) => (
<Rows
key={i}
/>
))}
</TableBody>
</div>
);
...
确保您的组件是可滚动的。
推荐阅读
- lisp - 以其他格式返回日期和时间 AutoCAD
- python - ModuleNotFoundError:没有名为“Foundation”的模块
- variables - 在 Ansible 中使用虚线 YAML 变量文件
- vue.js - Quasar 找不到 quasar extras,即 material-icons、roboto font css 和 polyfills
- postgresql - 从 v11 12 升级 PostgreSQL 时丢失所有表
- javascript - 如何根据 Typescript 中的字符串参数定义函数的参数类型?
- laravel - “access_token”是什么意思?在 Laravel Passport 社会补助金中
- python - cvlib 库的 pkg_resources.DistributionNotFound
- ios - 图像缩放在根 UIScrollView 内的 UIScrollView 中不起作用
- r - 如何根据特定的数据行更改数据表中的列