当前位置: 首页 > news >正文

HOW - 实现 useClickOutside 或者 useClickAway

场景

在开发过程中经常遇到需要点击除某div范围之外的区域触发回调:比如点击 dialog 外部区域关闭。

手动实现

import { useEffect } from "react"

/**
 * A custom hook to detect clicks outside a specified element.
 * @param ref - A React ref object pointing to the element to detect outside clicks.
 * @param callback - A callback function triggered when a click outside is detected.
 */
const useClickOutside = (
    ref: React.RefObject<HTMLElement>,
    callback: () => void
) => {
    useEffect(() => {
        const handleClickOutside = (event: MouseEvent) => {
            if (ref.current && !ref.current.contains(event.target as Node)) {
                callback()
            }
        }
        document.addEventListener("mousedown", handleClickOutside)
        return () => {
            document.removeEventListener("mousedown", handleClickOutside)
        }
    }, [ref, callback])
}

export default useClickOutside

使用:

const [visible, toggle] = useToggle(false)
const triggerRef = useRef<HTMLDivElement | null>(null)
useClickOutside(triggerRef, () => toggle(false))

<div ref={triggerRef} onClick={toggle}>
    {trigger}
</div>

react-use: useClickAway

https://github.com/streamich/react-use/blob/master/docs/useClickAway.md

import {useClickAway} from 'react-use';

const Demo = () => {
  const ref = useRef(null);
  useClickAway(ref, () => {
    console.log('OUTSIDE CLICKED');
  });

  return (
    <div ref={ref} style={{
      width: 200,
      height: 200,
      background: 'red',
    }} />
  );
};
http://www.dtcms.com/a/121973.html

相关文章:

  • 大模型本地部署系列(1) Ollama的安装与配置
  • 神经网络 | 基于脉冲耦合神经网络PCNN图像特征提取与匹配(附matlab代码)
  • 408 计算机网络 知识点记忆(6)
  • Elasticsearch DSL 中的 aggs 聚合分析
  • 数据结构实验3.3:求解迷宫路径问题
  • 西门子S7-1500与S7-200SMART通讯全攻略:从基础配置到远程IO集成
  • SQL注入(SQL Injection)
  • Ollama 与 llama.cpp 深度对比
  • [特殊字符]【高并发实战】Java Socket + 线程池实现高性能文件上传服务器(附完整源码)[特殊字符]
  • 虽然理解git命令,但是我选择vscode插件!
  • Databricks: Why did your cluster disappear?
  • 【UE5】RTS游戏的框选功能+行军线效果实现
  • Spring Boot 3.x 下 Spring Security 的执行流程、核心类和原理详解,结合用户描述的关键点展开说明,并以表格总结
  • WPF 绑定方式举例
  • LabVIEW 图像处理中常见的边缘检测算法
  • 发票真伪查验接口集成攻略-PHP批量查验发票真伪
  • 贪心算法(17)(java)可被三整除的最大整数和
  • [CISSP] [9] 安全漏洞,威胁和对策
  • 视觉分析AI赋能智慧水务多场景应用
  • S32K144的m_data_2地址不够存,重新在LD文件中配置地址区域
  • doxygen自动生成文档,注释容易错位的补充
  • 雷电模拟器过检测技术全解析
  • 使用docker 安装向量数据库Milvus
  • 黑马 SpringAI+DeepSeek 实战:从对话机器人到企业级知识库的大模型开发全攻略
  • <《AI大模型应知应会100篇》第8篇:大模型的知识获取方式及其局限性
  • package.json配置项积累
  • 防火墙介绍
  • SpringMvc的请求-获得请求参数
  • 启山智软的营销方法有哪些优势?
  • 大数据(7)Kafka核心原理揭秘:从入门到企业级实战应用