小编aml*_*ing的帖子

setTimeout无法通过移动设备上的React useEffect挂钩清除

问题摘要setTimeout使用React的useEffect挂钩时,无法在移动设备上清除。但是,它们正在桌面上清除。

问题再现https : //codepen.io/amliving/pen/QzmPYE

注意:请在移动设备上运行以重现该问题。

我的问题:为什么我的解决方案(如下所述)有效?

详细信息:我正在创建一个自定义钩子以检测空闲状态。叫它useDetectIdle。它会动态地window从一组事件中添加和删​​除事件侦听器,这些事件侦听器在触发一段时间后会通过调用提供的回调setTimeout

这是将动态添加到事件,然后从中删除的事件的列表window

const EVENTS = [
  "scroll",
  "keydown",
  "keypress",
  "touchstart",
  "touchmove",
  "mousedown", /* removing 'mousedown' for mobile devices solves the problem */
];
Run Code Online (Sandbox Code Playgroud)

这是useDetectIdle钩子。此处的重要之处在于,此钩子在其调用组件卸载时应清除所有现有的超时(并删除所有事件侦听器):

const useDetectIdle = (inactivityTimeout, onIdle) => {
  const timeoutRef = useRef(null);
  const callbackRef = useRef(onIdle);

  useEffect(() => {
    callbackRef.current = onIdle;
  });

  const reset = () => {
    if (timeoutRef.current) …
Run Code Online (Sandbox Code Playgroud)

javascript mouseevent settimeout reactjs react-hooks

6
推荐指数
1
解决办法
494
查看次数

在“添加到主屏幕”之后在iOS 13.2中持久保存地址栏

自将iPad升级到iOS 13.2之后,已“添加到主屏幕”并处于“引导访问”模式的网站会显示一个永久的地址/工具栏。我们有适当的meta标签,即

<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="mobile-web-app-capable" content="yes" />
Run Code Online (Sandbox Code Playgroud)

但仍然看到地址/工具栏:

在此处输入图片说明

任何见识将不胜感激。

html ipad ios reactjs progressive-web-apps

5
推荐指数
1
解决办法
34
查看次数