You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何为scroll事件处理函数正确定义类型?

解决scrollHandler的类型定义问题

你这里的核心问题是混淆了React合成事件和原生DOM事件的类型:

  1. 你是直接给原生DOM的document绑定scroll事件,不是在React组件上使用onScroll属性,所以不能用React.UIEvent(这是React合成事件的类型),而应该用原生DOM事件类型。
  2. 代码里存在笔误:addEventListener的第一个参数写的是'submit',应该改成'scroll',否则绑定的是表单提交事件,和scrollHandler不匹配。

正确的类型定义写法

直接使用全局的Event或更精确的UIEvent类型(原生DOM的事件类型,非React命名空间下的):

import { useEffect } from 'react';

useEffect(() => {
  document.addEventListener('scroll', scrollHandler);

  return () => document.removeEventListener('scroll', scrollHandler);
}, []); // 务必添加空依赖数组,避免重复绑定/解绑

const scrollHandler = (e: Event) => {
  console.log(e);
};

如果需要更精确的类型,也可以用UIEvent(scroll事件的事件对象属于UIEvent的实例):

const scrollHandler = (e: UIEvent) => {
  console.log(e);
};

为什么React.UIEvent无效?

React.UIEvent<T>是React封装的合成事件类型,仅适用于React组件的事件回调(比如<div onScroll={(e: React.UIEvent<HTMLDivElement>) => {}} />)。当直接操作原生DOM元素绑定事件时,事件对象是浏览器原生的事件实例,所以要使用全局作用域下的DOM事件类型。

内容的提问来源于stack exchange,提问作者ko1p

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 21:55:24