aiyoudiao aiyoudiao
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档

码二

扫微信二维码,认识一下码二吧😉。
  • JavaScript
  • Vue
  • React
  • 低代码
  • 线性系统
  • 暂未分类
  • LeetCode
  • 算法
  • 数据结构
  • 设计模式
  • Other
  • PMP
  • Office
  • 面试
  • Bash
  • 流年往事
  • 经验片段
  • 读书杂感
  • 归档
  • 分类
  • 标签
  • 简介
  • 收藏
  • 有趣
  • 文档
  • 流年往事

  • 经验片段

    • 2022年2月21日
    • 2022年3月16日
    • 2022年3月21日
    • 2022年3月23日
    • 2022年4月9日
    • 2022年4月10日
    • 2022年4月15日
    • 2022年4月27日
    • 2022年4月28日
    • 2022年5月6日
    • 2022年5月16日
    • 2022年5月20日
    • 2022年6月16日
    • 2022年6月22日
    • 2022年6月23日
    • 2022年8月17日
    • 2022年10月12日
    • 2022年11月6日
    • 2022年11月8日
    • 2022年11月21日
    • 2022年12月06日
    • 2022年12月09日
    • 2022年12月27日
    • 2023年01月21日
    • 2023年02月03日
    • 2023年03月19日
    • 2023年03月26日
    • 2023年04月12日
    • 2023年05月03日
    • 2023年06月04日
  • 读书杂感

  • 历程
  • 经验片段
aiyoudiao
2022-10-12

2022年10月12日

今天协助同事解决了一个问题,就是react-daterange-picker 和 react-date-picker 在@material-ui的dialog中出现选择日历点击一次就直接关闭的问题。

通过查看源码后发现,在picker组件中对document的mousedown、focusin、touchstart进行了全局监听,只要这三个事件触发了,就会判断触发该事件的src Element是否在picker组件范围内,如果不在就会关闭该picker组件。

在mui中,默认做了自动聚焦的操作,当事件冒泡触发到mui的dialog组件之后,dialog组件会去检查当前聚焦的srcElement是否是它自己,如果不是的话,就会调用focus方法,如此一来才会出现那种问题。

解决办法除了看picker组件的源码之外,还查阅了(mui的官方文档#焦点陷阱)[https://v4.mui.com/zh/components/modal/#limitations],之后又去查看了mui的Dialog源码,这个组件的源码中使用了Modal,Modal组件中又使用了Unstable_TrapFocus,在Unstable_TrapFocus组件中监听了全局的focus,这个focus中就会判断当前模态框是否包含已激活的元素,如果是的话,就会调用当前Modal的focus方法。

其它类似的问题也是这样解决的,原理就是禁用mui组件中的自动聚焦的功能,从而阻断干扰,源码中有对disableEnforceFocus的处理。

<Dialog
    disableEnforceFocus
></Dialog>
#代码片段#react
上次更新时间: 10年18月2023日 01时57分53秒
2022年8月17日
2022年11月6日

← 2022年8月17日 2022年11月6日 →

最近更新
01
01.数据结构导论一览.md
10-16
02
30.2023年06月04日.md
06-04
03
08.与测量相关.md
05-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 aiyoudiao 码二 备案号: 鄂ICP备2022002654号-1