当前位置:首页 > React

react如何监听document

2026-01-23 22:33:25React

监听 document 事件

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

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 示例:

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 等)。

react如何监听document

标签: reactdocument
分享给朋友:

相关文章

react中monent如何获取日期

react中monent如何获取日期

使用 Moment.js 获取当前日期 在 React 中通过 Moment.js 获取当前日期,可以直接调用 moment() 函数。它会返回包含当前日期和时间的 Moment 对象。 impor…

电脑如何安装react

电脑如何安装react

安装 Node.js 和 npm React 依赖于 Node.js 和 npm(Node Package Manager)。从 Node.js 官网下载并安装最新稳定版本,安装完成后会自动包含 np…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在 s…

react如何查

react如何查

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

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…