React中实现类似v-click-outside效果

  • 问题背景

    • 有时候我们需要点击某个下拉框等元素、组件的外部关闭下拉框。
  • 解决方法

    • 使用window.addEventListener监听整个页面

      const [elVisible,setElVisible] = useState(false)
      const handle = (event) => {if(!el.current?.contains(event.target) && elVisible){setElVisible(false)}
      };
      window.addEventListener('click',handle)
      

      在上面的handle函数中,我们判断了点击事件的原始目标是否是el元素或el元素的子元素。

    • 使用useEffect模拟componentDidMounted和componentBeforeUnmount

      useEffect(() => {const [elVisible,setElVisible] = useState(false)const handle = (event) => {if(!el.current?.contains(event.target) && elVisible){setElVisible(false)}};window.addEventListener('click',handle)return () => window.removeListener('click',handle)
      })
      

      借助useEffect的副作用函数将在组件挂载之后执行的性质模拟componentDidMounted,并且副作用函数的return将在组件销毁前执行,这样我们可以用于销毁监听器,避免内存泄漏。

React中实现类似v-click-outside效果相关推荐

  1. react中实现取色器的效果React Color

    前言: react中实现取色器的效果 官网地址:入口 源码:https://github.com/casesandberg/react-color.git 实现效果: 步骤: 第一:引入 npm in ...

  2. 【SwiftUI模块】0018、SwiftUI搭建一个类似支付宝中的余额宝余额数字动画效果

    SwiftUI模块系列 - 已更新18篇 SwiftUI项目 - 已更新1个项目 往期Demo源码下载 技术:SwiftUI.SwiftUI3.0.支付宝.余额宝.数字动画 运行环境: SwiftUI ...

  3. 【VUE】有没有类似React中<>空标签的东西呢?

    问:Vue中有没有类似React中<>空标签的东西呢? 答:有 不废话直接上方案: 方案一 vue2/3应该是通用的方式,vue3上可行 若上级使用到<Transition>会 ...

  4. React中Fragment标签和空标签的使用(vue中的template标签类似)

    Fragment作用: 类似于vue中的template标签,将当前dom不渲染后页面.在多层循环中可以添加key属性,其他属性不可以添加.不然会警告,提示只能有key属性和children vdom ...

  5. React中实现插槽效果的方案

    文章目录 React实现插槽 children实现插槽 props实现插槽 React实现插槽 在开发中,我们抽取了一个组件,但是为了让这个组件具备更强的通用性,我们不能将组件中的内容限制为固定的di ...

  6. react中使用构建缓存_使用React构建Tesla的电池范围计算器(第1部分)

    react中使用构建缓存 by Matthew Choi 由Matthew Choi 使用React构建Tesla的电池范围计算器(第1部分) (Building Tesla's Battery Ra ...

  7. 处理 react_【学习教程】React 中阻止事件冒泡的问题

    来源 | https://www.cnblogs.com/Wayou/p/react_event_issue.html 在正式开始前,先来看看 js 中事件的触发与事件处理器的执行. js 中事件的监 ...

  8. 如何在React中做到jQuery-free

    前言 前些天在订阅的公众号中看到了以前阮一峰老师写过的一篇文章,「如何做到 jQuery-free?」.这篇文章讨论的问题,在今天来看仍不过时,其中的一些点的讨论主要是面向新内核现代浏览器的标准 DO ...

  9. React中的合成事件

    React中的合成事件 React自己实现了一套高效的事件注册.存储.分发和重用逻辑,在DOM事件体系基础上做了很大改进,减少了内存消耗,简化了事件逻辑,并最大程度地解决了IE等浏览器的不兼容问题. ...

最新文章

  1. PDO的bindParam与bindValue的区别
  2. HDU_oj_2050 折线分割平面
  3. python入门之玩转列表我的菜单_我的Python成长之路---第一天---Python基础(作业2:三级菜单)---2015年12月26日(雾霾)...
  4. matlab读取data格式,ReadData3D 各种格式图像的读取,包括医学 效果很好 matlab 272万源代码下载- www.pudn.com...
  5. Python中使用中文
  6. php+mysql个人博客系统_推荐几个开源的个人独立博客系统
  7. 电脑系统哪个最好用_小米MIUI领衔,目前最好用的几个安卓系统,你觉得哪个更好用?...
  8. 决策过程并举例_成本效益分析举例
  9. python中判断文本的编码格式
  10. win98/win95
  11. python新手入门.pdf_所有Python入门书籍的整理,初学者必看,附赠所有电子版(一)...
  12. DevComponents.DotNetBar2 美化包使用以及验证教程
  13. 业务与信令-第6章VoLTE信令
  14. 数学常用特殊符号读音
  15. 图形桌面与命令行模式相关切换快捷键
  16. python_计算股票指标
  17. 购物系统 java代码_java购物系统源代码
  18. win7系统桌面的东西不见了,提示您已使用临时配置文件登录
  19. 报表和专业BI有什么区别?
  20. CentOS7.x配置三线策略路由

热门文章

  1. QT各种压缩包下载地址
  2. 计算机无法ghost安装系统安装系统安装,详细教您重装Ghost系统错误怎么办
  3. HDU 5238 线段树+数论
  4. 便签工具类产品推荐,办公便签软件哪个好
  5. 如何将二维码巧妙放进海报里?
  6. 获取HTML页面的所有图片地址
  7. esp32 micropython 控制ws2812 RGB灯带
  8. OKHTTP之缓存配置详解
  9. 接口自动化之操作mysql数据库
  10. 错误 3 error C2181: 没有匹配 if 的非法 else c:\users\zhong\desktop\我的程序\c++qt程序\test\sineware\sineware\sinewa