react实现模拟弹框遮罩的自定义hook

这篇具有很好参考价值的文章主要介绍了react实现模拟弹框遮罩的自定义hook。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

需求描述

点击按钮用于检测鼠标是否命中按钮

代码实现

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

// 封装一个hook用来检测当前点击事件是否在某个元素之外
function useClickOutSide(ref,cb) {
	useEffect(()=>{
		const handleClickOutside = (e) => {
			if(ref.current && ref.current !== e.target){
				cb(); 
			}
		}
		document.addEventListener('click',handleClickOutside);
		return () => document.removeEventListener('click', handleClickOutside);
	},[cb, ref]);
}


function Dialog() {
	const [visible, setVisible] = useState(false);
	const refObj = useRef(null);
	useClickOutSide(refObj,()=>{setVisible(false);} );
	return (
		<div>
			<button
				ref={refObj}
				onClick={() => {
					setVisible(true);
				}}
			>打开</button>
			{visible && <div className="dialog">我是弹框的内容</div>}
		</div>
	);
}

export default Dialog;

效果

react实现模拟弹框遮罩的自定义hook,javascript,前端,react.js

参考

React好玩的自定义hook-useClickOutSide_哔哩哔哩_bilibili文章来源地址https://www.toymoban.com/news/detail-652640.html

到了这里,关于react实现模拟弹框遮罩的自定义hook的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【taro react】 ---- 常用自定义 React Hooks 的实现【四】之遮罩层

    1. 问题场景 在实际开发中我们会遇到一个遮罩层会受到多个组件的操作影响,如果我们不采用 redux 之类的全局状态管理,而是选择组件之间的值传递,我们就会发现使用组件的变量来控制组件的显示和隐藏很不方便,更不要说像遮罩层这样一个项目多处使用的公共组件,他

    2024年02月07日
    浏览(38)
  • 微信小程序实现各类弹框、自定义弹框

    目录 wx.showModal  wx.showToast wx.showLoading wx.showActionSheet 自定义弹框 功能介绍:常用于显示需用户操作的信息框,用户可进行确认、取消或输入内容。 常用参数介绍: title:提示的标题: content:提示的内容: showCancel:是否显示取消按钮 cancelText:取消按钮的文字 confirmText:

    2024年01月18日
    浏览(65)
  • React组件间数据传递(弹框和高阶组件(HOC)特性实现)

    在现代前端开发中,React 已经成为了最受欢迎的 JavaScript 库之一。而在复杂的应用中,不同组件之间的数据传递问题显得尤为关键。在本文中,我们将探讨一种高效的方法,即如何利用弹框和高阶组件特性来实现 React 组件间的数据传递。我们将通过一个具体的业务场景来深入

    2024年02月11日
    浏览(41)
  • layui弹框(上)- 基础参数:弹出层、多按钮、对齐方式、遮罩层(透明度)、定时关闭...的集合

    一、使用layui的第一步:引用layui的js和css文件 link rel=\\\"stylesheet\\\" href=\\\"layui/css/layui.css\\\" / script src=\\\"layui/layui.js\\\"/script 您也可以引用网络资源 script src=\\\"layui.js:https://heerey525.github.io/layui-v2.4.3/layui/layui.js\\\"/script link rel=\\\"stylesheet\\\" href=\\\"https://heerey525.github.io/layui-v2.4.3/layui/css/layui.css\\\" 二、引

    2024年02月02日
    浏览(65)
  • 自定义loadbalance实现feignclient的自定义路由

    服务A有多个同事同时开发,每个同事都在dev或者test环境发布自己的代码,注册到注册中心有好几个(本文nacos为例),这时候调用feign可能会导致请求到不同分支的服务上面,会出现一些问题,本文重点在于解决该问题 解决方案 调用流程 [外链图片转存失败,源站可能有防盗链机

    2024年02月11日
    浏览(40)
  • 解决问题:Element ui组件中Dialog对话框只显示遮罩层,不显示弹框内容

    以下是Dialog 对话框的基本用法: 这个时候页面只显示了遮罩层,但是不显示弹框的内容,查阅文档后,发现有这样一条: append-to-body的默认值是false,所以需要自己在el-dialog标签中手动设置为true,  加上之后弹框内容就可以显示了。

    2024年02月06日
    浏览(57)
  • 解决element-ui组件库中dialog组件只显示遮罩层,未显示弹框的问题

    以下是直接粘贴的组件--基础用法 el-button type=\\\"text\\\" @click=\\\"dialogVisible = true\\\"点击打开 Dialog/el-button el-dialog   title=\\\"提示\\\"   :visible.sync=\\\"dialogVisible\\\"   width=\\\"30%\\\"   :before-close=\\\"handleClose\\\"   span这是一段信息/span   span slot=\\\"footer\\\" class=\\\"dialog-footer\\\"     el-button @click=\\\"dialogVisible = false\\\"取 消

    2024年02月03日
    浏览(87)
  • 使用ETLCloud强大的自定义规则实现自定义数据处理算法

    实时数据处理规则有什么作用 ? 在大数据中的实时数据采集、ETL批量数据传输过程中很多数据处理过程以及数据质量都希望实时进行处理和检测并把不符合要求的脏数据过滤掉或者进行实时的数据质量告警等。 在数据仓库建设过程中,每家企业的数据处理过程中肯定会有一

    2024年02月08日
    浏览(50)
  • android-使用PopupWindow实现随机排列的自定义密码键盘

    break; } else { b2 = true; } } if (b2) { data[i] = x; b = false; break; } } } return data; } keyboard_bg_big.xml ?xml version=\\\"1.0\\\" encoding=\\\"utf-8\\\"? item android:state_pressed=“true” android:drawable=“@drawable/key11”/ item android:state_focused=“true” android:drawable=“@drawable/key12”/ item android:state_focused=“false” android:state_p

    2024年04月27日
    浏览(36)
  • 基于ETLCloud的自定义规则调用第三方jar包实现繁体中文转为简体中文

    前面曾体验过通过零代码、可视化、拖拉拽的方式快速完成了从 MySQL 到 ClickHouse 的数据迁移,但是在实际生产环境,我们在迁移到目标库之前还需要做一些过滤和转换工作;比如,在诗词数据迁移后,发现原来 MySQL 中的诗词数据都是繁体字,这就导致在直接迁移到 ClickHous

    2024年02月11日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包