当前位置:首页 > React

react如何监听document

2026-01-23 22:33:25React

监听 document 事件

在 React 中监听 document 事件可以通过 useEffect 钩子实现。在组件挂载时添加事件监听,卸载时移除监听以避免内存泄漏。

react如何监听document

import React, { useEffect } from 'react';

function MyComponent() {
  useEffect(() => {
    const handleKeyDown = (event) => {
      console.log('Key pressed:', event.key);
    };

    document.addEventListener('keydown', handleKeyDown);

    return () => {
      document.removeEventListener('keydown', handleKeyDown);
    };
  }, []);

  return <div>Press any key to see console output.</div>;
}

自定义 Hook 封装

将监听逻辑封装成自定义 Hook 以便复用。以下是一个监听 document 点击事件的 Hook 示例:

react如何监听document

import { useEffect } from 'react';

function useDocumentClick(callback) {
  useEffect(() => {
    document.addEventListener('click', callback);
    return () => document.removeEventListener('click', callback);
  }, [callback]);
}

function MyComponent() {
  useDocumentClick(() => {
    console.log('Document clicked!');
  });

  return <div>Click anywhere on the page.</div>;
}

动态事件依赖

当事件处理函数依赖组件状态或 props 时,需将其包含在 useEffect 的依赖数组中,并使用 useCallback 优化性能:

import React, { useEffect, useCallback, useState } from 'react';

function MyComponent() {
  const [count, setCount] = useState(0);

  const handleScroll = useCallback(() => {
    console.log('Scrolled, current count:', count);
  }, [count]);

  useEffect(() => {
    document.addEventListener('scroll', handleScroll);
    return () => document.removeEventListener('scroll', handleScroll);
  }, [handleScroll]);

  return (
    <div style={{ height: '200vh' }}>
      <button onClick={() => setCount(c => c + 1)}>Increment: {count}</button>
    </div>
  );
}

注意事项

  • 清理监听器:务必在 useEffect 的清理函数中移除监听器,防止多次绑定。
  • SSR 兼容:在服务端渲染(SSR)场景中,document 可能不存在,需通过 typeof document !== 'undefined' 进行判断。
  • 事件类型:根据需求选择合适的事件类型(如 keydownclickscroll 等)。

标签: reactdocument
分享给朋友:

相关文章

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…

react如何拓展

react如何拓展

React 拓展方法 使用高阶组件(HOC) 高阶组件是一种复用组件逻辑的方式,通过接收一个组件并返回一个新组件实现功能拓展。例如,为组件添加日志功能: function withLogging…

如何配置react

如何配置react

配置React项目的步骤 安装Node.js和npm 确保系统已安装Node.js(包含npm)。可通过官网下载并安装最新版本。安装完成后,运行以下命令验证版本: node -v npm -v 创建…

react如何发音

react如何发音

React的发音 React的正确发音为 /riˈækt/,类似于“ree-akt”。以下是详细说明: 发音分解 第一个音节“Ree”发音类似英文单词“see”中的“ee”音。 第二个音节…

react 如何跳转

react 如何跳转

使用 React Router 进行页面跳转 React 应用中通常使用 react-router-dom 库实现页面跳转。以下是几种常见的跳转方式: 安装依赖 npm install react…