如何在React功能组件中添加事件

2024-04-16

我有一个关于 React 函数式组件的问题,特别是关于函数式组件中的函数的问题。例如:

import React, { useEffect } from 'react';

const Component = (props) => {  
  useEffect(() => {
    window.addEventListener('scroll', handleScroll);
  });
  useEffect(() => {
    return () => {
      window.removeEventListener('scroll', handleScroll);
    };
  }, []);

  function handleScroll() {
    let scrollTop = window.scrollY;
  }


  return ()
}

这只是一个关于如何使用的快速演示useEffect订阅事件,useRef为事件监听器创建元素引用,以及useState存储事件结果。

请注意,这仅用于演示目的。呼唤setState在滚动事件回调的每个刻度中是NOT ideal.

import React, { useState, useEffect, useRef } from "react";
import ReactDOM from "react-dom";

import "./styles.css";

const App = () => {
  // set default value
  const [scrollTop, setScrollTop] = useState(document.body.scrollTop);

  // create element ref
  const innerRef = useRef(null);

  useEffect(() => {
    const div = innerRef.current;
    // subscribe event
    div.addEventListener("scroll", handleOnScroll);
    return () => {
      // unsubscribe event
      div.removeEventListener("scroll", handleOnScroll);
    };
  }, []);

  const handleOnScroll = (e) => {
    // NOTE: This is for the sake of demonstration purpose only.
    // Doing this will greatly affect performance.
    setScrollTop(e.target.scrollTop);
  }

  return (
    <>
      {`ScrollTop: ${scrollTop}`}
      <div
        style={{
          overflow: 'auto',
          width: 500,
          height: 500,
          border: '1px solid black',
        }}
        ref={innerRef}
      >
        <div style={{ height: 1500, width: 1500 }}>
          Scroll Me
        </div>
      </div>
    </>
  )
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

这是代码沙箱中的工作演示:https://codesandbox.io/s/react-function-component-event-listener-demo-fmerz?fontsize=14 https://codesandbox.io/s/react-functional-component-event-listener-demo-fmerz?fontsize=14

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在React功能组件中添加事件 的相关文章

  • 使用 ref 触发反应 dropzone 不起作用

    我正在实现这个库 https github com felixrieseberg React Dropzone Component https github com felixrieseberg React Dropzone Compone
  • 在 React 中将模板分离到外部文件

    我正在为客户开发 ReactJS 应用程序 我希望客户端能够自定义应用程序中的一些配置和模板 所以我创建了一个config js file window APP CONFIG url example com template item di
  • 在react-big-calendar中单击事件时添加弹出窗口?

    当单击事件时 我无法将弹出窗口添加到事件中 弹出窗口似乎只显示在事件槽中 而不是显示在事件槽的顶部 此外 由于我为事件创建了一个自定义组件并尝试在自定义组件中实现弹出窗口 因此只有当我单击事件名称时才会显示弹出窗口 这是代码 class C
  • react-route,react-hot-loader.webpack(您无法更改 ;它将被忽略)

    这是我的第一个项目react react router react hot loader webpack dev server and webpack 当我更改react组件中的代码时 热加载器生效 但同时控制台告诉我一个警告 您无法更改
  • 使用 mongoose 通过 React 应用程序将图像上传到 mongodb 数据库

    我正在为找到的对象创建一个反应应用程序 我想允许用户上传这些对象的照片 我尝试使用 axios 通过 post 请求将图像发送到猫鼬服务器 但它不起作用 这就是我如何将图像存储在带有预览的 React 组件中 handleImage eve
  • ReactJS - Redux Form - 如何根据单选字段元素有条件地显示/隐藏元素?

    我对 Redux 比较陌生 我有一个表单 其中有一些无线电输入 是 或 否 基本上 我想根据该无线电输入选择有条件地显示包含另一个 redux 表单字段的另一个元素 有直接的方法可以做到这一点吗 我想检查一下formProps site v
  • ReactJs 警告:不推荐使用改变“style”。考虑事先克隆它

    我收到以下警告 inWarning div was passed a style object that has previously been mutated Mutating style is deprecated Consider c
  • 可下载文件 - 盖茨比

    由于某种原因 尝试下载文件时失败 我尝试了几种不同的方法 但都失败了 我读过一些关于 pdf word 文件在盖茨比中被 禁止 的内容 默认 a href route to file a 好像不行 显示下载失败 任何帮助表示赞赏 See 将
  • 如何禁用 Chrome 自动完成功能?

    我们想要禁用自动完成在 Chrome 浏览器中的 React JavaScript 应用程序中 我们尝试了互联网上提供的一系列解决方案 但没有任何效果 autoComplete off不可靠 其他方法也不可靠 目前这对我们来说非常重要 所以
  • 如何在 React 中测试表单提交?

    我有以下 React 组件 export default class SignUpForm extends React Component doSignupForm event Some API call render return div
  • 使用 React.lazy 时未捕获未定义的错误

    我正在尝试实施基于路由的代码分割 https reactjs org docs code splitting html route based code splitting正如 React 文档中提到的 这是添加延迟实现之前我的应用程序 这
  • React Native:加载图像后应用程序性能不佳

    加载图像似乎没有问题 但是加载完毕后就出现问题了 在我的应用程序中 我在整个游戏中一张一张地加载卡片图像 一旦我加载了 40 张卡片图像 整个应用程序就会变得很慢 它总是发生在第 40 个图像处 当我在第 40 个图像之后继续加载更多卡片图
  • React-Native:如何定义 JavaScript 类

    我正在使用本机反应 我需要定义一个类 class myClass email string name string constructor setUser fbid string token string boolean 我试图在它自己的文
  • React Context 的范围是什么?

    我不清楚在哪里Context可以在 React 应用程序中创建 我可以在组件树中的任何位置创建上下文吗 如果可以 该上下文的范围是否仅限于创建它的子级 或者 Context 本质上是全局的 我可以在文档中的哪里找到这个 案例 我在页面上多次
  • React-redux useDispatch() 未捕获类型错误

    我正在尝试创建一个简单的组件来使用 React Redux 钩子分派操作useDispatch 我收到一个错误 我已将组件修剪到发生错误的位置 当调用 useDispatch 函数时会发生这种情况 import useDispatch fr
  • HTMLImageElement 作为 React Child 无效

    我正在尝试异步加载图像 并且仅在加载图像后才将其显示在 React 应用程序中 componentDidMount const img new Image img onload gt this setState originalImage
  • 有没有办法让 React 为孩子自动定义“键”?

    我正在学习 React 我偶然发现了 动态儿童 的这个怪癖 带有代码示例的序言 Render Pass 1
  • Flux + React.js - 操作中的回调是好还是坏?

    让我解释一下我最近遇到的问题 我有 React js Flux 驱动的应用程序 有一个列表显示文章数量 注意 应用程序中有多个不同的列表 和文章详情查看在里面 但每个列表只有一个 API 端点 它返回文章数组 为了显示我需要的详细信息fin
  • React Native - 跨屏幕传递数据

    我遇到了一些麻烦react native应用程序 我不知道如何跨屏幕传递数据 我意识到还有其他类似的问题在 SO 上得到了回答 但是这些解决方案对我来说不起作用 我正在使用StackNavigator 这是我的设置App js file e
  • Material-ui :从主题中提取颜色

    我想使用我的颜色material ui像这样的组件内的主题 const MyComponent props gt

随机推荐

  • RestSharp 到 WCF 作为 JSON 日期格式化/序列化

    我有一个 WCF 方法 它接受 时间戳 列表 public bool SyncTimestamps IList
  • 更改 Drupal 中的节点创建标题?

    假设我有一个名为 产品 的节点 当我创建这样的节点时 它将始终显示 创建产品 作为节点的标题 创建节点时如何更改此标题 你的意思是你有一个内容类型 http drupal org node 21947 产品 创建 产品 类型的节点时的 创建
  • JavaScript 正则表达式中包含的拉丁字符

    我希望将下面的拉丁字符包含在 JavaScript 正则表达式中以进行字符串验证 到目前为止 我只有一个基本的字符串正则表达式 var stringReg a zA Z i 提前致谢 斯卡洛 我在用着 A z u00C0 u00ff s 作
  • 如何为 casper.repeat 设置变量值

    我想根据来自运行 CasperJS 的页面的变量值重复使用 CasperJS 的步骤 为了获得这个值 我做了类似的事情 casper waitForSelector xxxx function myvalue this evaluate f
  • iOS 绑定 javascript 函数来点击

    这在桌面 safari 中有效 但在 iOS 版本中不会弹出警报 是否可以绑定到 iOS 中的 html 元素 每当用户单击页面上的其他位置时 我想关闭下拉菜单 html bind click function alert clicked
  • 如何在 iPhone 上的 ViewController 之间共享对象?

    我的应用程序是一个选项卡栏应用程序 每个选项卡都有一个单独的视图控制器 我的第一个视图控制器 A 中有一个对象 其中包含我存储的所有应用程序数据 请忽略 NSUserDefaults 当我按下第二个视图控制器 B 上的按钮时 需要由第二个视
  • 在 Spark 中,从哈希映射创建数据帧,其中键作为列名称,值作为行

    我有一个数据框 我有一个列 它是数据框中的地图 如下所示 scala gt df printSchema root A1 map nullable true key string value string valueContainsNull
  • 无法从 vs 2015 安装程序安装 xamarin

    我安装了 vs 2015 升级 1 并尝试从设置中安装 Xamarin 但是当我尝试安装它时 最后收到此错误消息 C Net Xamarin 安装程序在安装此软件包时遇到意外错误 这可能表明软件包有问题 错误代码为2711 我该如何解决这个
  • 订购 NSURL 数组

    我正在将大量图像路径加载到 NSURL 中 这些图像位于按 1 PNG 2 PNG 3 PNG 到 1500 PNG 顺序排列的文件夹中 当我尝试加载它们时 let imagePath path images let url NSURL f
  • 扩展 ActiveStorage::Attachment - 添加自定义字段

    我想扩展 ActiveStorage Attachment 类并添加一个枚举属性以实现附件的可见性 我最初的方法是在 app models 目录中创建一个新文件attachment rb 如下所示 class ActiveStorage A
  • 如何使用 Odoo 从表单字段获取值?

    我在表单视图中有这个字段
  • 测试入口点贡献

    我正在编写一个指定一组入口点的 Python 模块 以便其他主机模块可以发现新的功能 我正在遵循指定的 setuptools 方法官方文档 https setuptools readthedocs io en latest userguid
  • Python - 使 gspread.service_account 采用 python 字典或字符串而不是文件名

    我目前正在使用 google Sheets 并正在使用 python 库gspread使其自动化 我的代码的第一行是导入 gspread 库并使用以下命令登录到服务帐户service account json谷歌控制台给我们的文件 impo
  • TypeScript/TSLint:TSLint 无法通过 baseUrl 识别根相对导入

    我通过以下方式使用根相对导入baseUrl编译器选项在tsconfig json 按照这个解决方案 https stackoverflow com a 42306860 1253298 但我遇到了一个问题 Atom IDE 向我显示如下所示
  • 有没有办法使用 Cereal / C++ 为 std::map 指定更简单的 JSON(反)序列化?

    我正在从事的项目是一个管理大量自定义硬件设备的 C 应用程序 该应用程序有一个供客户端使用的套接字 端口接口 如 GUI 每种设备类型都有自己定义良好的 JSON 模式 我们可以使用 Cereal 来序列化这些模式 但应用程序还需要解析来自
  • 了解 T-SQL stdev、stdevp、var 和 varp

    我很难理解这些统计函数的作用以及它们的工作原理 我很难理解 stdev 与 stdevp 以及 var 等价物的工作原理 有人可以帮我把这些分解成愚蠢的吗 在统计学中 标准差和方差是衡量总体中的指标偏离平均值 通常是平均值 的程度 标准差定
  • 违反 - 未找到父键错误

    我出现以下错误 INSERT INTO GroupMembers VALUES Goldfrat Simon Palm ERROR at line 1 ORA 02291 integrity constraint SHAHA1 IAM IS
  • VS2010/C#4 的 C# 编译器错误 CS1628

    此编译器错误列在 C 编译器错误中MSDN http msdn microsoft com en us library we3011f5 28v vs 90 29 aspx适用于 VS2005 和 VS2008 但不适用于较新的版本 这会让
  • iOS VoiceOver“找不到标题”

    我有一个 UITableView 其中每个 UITableViewCell 有 2 个 UILabels 1 个标题和 1 个内容 标头的 AccessibilityTrait 设置为 header 使用辅助功能检查器检查模拟器屏幕时 我能
  • 如何在React功能组件中添加事件

    我有一个关于 React 函数式组件的问题 特别是关于函数式组件中的函数的问题 例如 import React useEffect from react const Component props gt useEffect gt windo