React&Service Worker - 缓存内容 - 通知用户

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了React&Service Worker - 缓存内容 - 通知用户相关的知识,希望对你有一定的参考价值。

我有一个关于service workersreactjs的问题。

建议是通知用户有关缓存的内容或新内容何时可用,以便用户了解缓存的内容。

我现在的问题是,如何通知用户?

当我使用create-react-app时,在registerServiceWorker.js中有这个代码,它说:

此时,旧内容将被清除,新内容将被添加到缓存中。这是展示“新内容可用;请刷新”的最佳时机。您的网络应用中的消息。

function registerValidSW(swUrl) {
  navigator.serviceWorker
    .register(swUrl)
    .then(registration => {
      registration.onupdatefound = () => {
        const installingWorker = registration.installing;
        installingWorker.onstatechange = () => {
          if (installingWorker.state === 'installed') {
            if (navigator.serviceWorker.controller) {
              // At this point, the old content will have been purged and
              // the fresh content will have been added to the cache.
              // It's the perfect time to display a "New content is
              // available; please refresh." message in your web app.
              console.log('New content is available; please refresh.');
            } else {
              // At this point, everything has been precached.
              // It's the perfect time to display a
              // "Content is cached for offline use." message.
              console.log('Content is cached for offline use.');
            }
          }
        };
      };
    })
    .catch(error => {
      console.error('Error during service worker registration:', error);
    });
}

但实际上在这个脚本上,当然,我无法访问document,因为服务工作者远离脚本。如何在反应组件中处理此问题?

其他人如何处理此问题并通知用户?

答案

您的问题中包含的代码在window客户端的上下文中运行。您可以完全控制显示您想要的任何UI元素。随意修改那些console.log()语句并显示一些东西。

(在服务工作者的上下文中运行单独的代码,并且您的代码无法访问DOM是正确的。但这不是您要问的代码。)

以上是关于React&Service Worker - 缓存内容 - 通知用户的主要内容,如果未能解决你的问题,请参考以下文章

Service Worker 在 React 应用程序中刷新后导致空白页

我如何在Service Worker中缓存动态URL?它与预缓存有关系吗?我正在使用ReactJS默认serviceWorker

Service Worker 没有收到消息

Service Worker的缓存时机与缓存策略

Service Worker和HTTP缓存

学习笔记create-react-app 自定义Service Worker