reactjs - 无法在 React 脚本中注册 Service Worker
问题描述
我正在使用 ReactJS 制作一个基本的 Web 应用程序来创建推送通知。我想让用户可以通过单击按钮手动注册服务人员。但是什么也没发生(控制台中没有成功的消息)。我在某个地方犯了错误吗?
在标准的 js 文件中,注册服务工作者的代码有效(虽然没有按钮),但在反应文件中无效。
注册服务工作者的代码:
和按钮上的事件监听器:
提前致谢 !
解决方案
我看到的主要问题是您将 EventListener 附加到window
它将在“加载”时执行。由于您可以单击按钮,因此很可能已经触发了此事件,因此未加载 SW。尝试删除事件处理程序部分以直接调用注册函数。然后它看起来像这样:
function registerSW() {
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('sw.js')
//...
}
}
我看到的另一个问题是您尝试通过直接分配来设置状态。在反应中,您不应该像这样访问状态,而应该this.setState
像这样调用:
// ...
.then(swReg => {
console.log('SW registered');
this.setState({ swReg: swReg });
})
// ...
推荐阅读
- velo - 单击 wix 代码时将按钮增加 1
- c# - 接收 UDP 数据包并将其保存在字符串数组中
- java - 我不明白单例类的概念
- npm - npm 无法更改 Jasmine 包版本
- multithreading - 如何在 OCaml 中使用线程模块
- avfoundation - 您如何实际播放 AVAssetTrack,而不是 AVURLAsset?
- ansible - 在 ansible 中,Chef for Block 中的等效资源是什么?
- git - 通过 git init 在子文件夹中创建新的 git 存储库并在主 git 存储库中忽略
- wpf - 使用 MVVM 在 WPF 中选择 TreeView 节点时填充 ListBox
- reactjs - 不变违规:元素类型无效:酶错误 - 帮助诊断?