在自定义 serviceWorker 中调度 redux 操作

Posted

技术标签:

【中文标题】在自定义 serviceWorker 中调度 redux 操作【英文标题】:Dispatching redux actions inside custom serviceWorker 【发布时间】:2019-12-24 16:23:03 【问题描述】:

我想对从服务器收到的推送执行操作。我有一个自定义服务工作者,它具有用于推送的事件侦听器。现在我想在收到来自服务器的推送时调度 redux 操作。我的自定义服务人员目前住在公用文件夹中。而且我无法在此文件中导入商店。任何帮助将不胜感激。谢谢!

【问题讨论】:

【参考方案1】:

无法在您的 Service Worker 代码内部调度 Redux 操作。

但是,您真正想做的是使用 postMessage API 进行通信。使用 postMessage,您可以在 SW 收到来自服务器的推送时向浏览器 JS 上下文发送消息。您可以找到更多信息,例如。这里https://developer.mozilla.org/en-US/docs/Web/API/Client/postMessage。

为什么会这样? 这是不同执行上下文的结果。您的普通 JS 代码(React、Redux、动作等)在 浏览器上下文中运行,而您的服务代码在 SW 上下文中运行。这两个上下文不共享 ANY 变量或状态。因此,您不能在 SW 代码中调用任何函数(例如 Redux 操作)。您需要在两个上下文之间进行通信,然后在浏览器上下文中接收到消息后,调用您希望的任何函数。

【讨论】:

非常感谢。我被困在上面超过一天。现在我有了一些前进的方向。

以上是关于在自定义 serviceWorker 中调度 redux 操作的主要内容,如果未能解决你的问题,请参考以下文章

长时间等待 Service Worker 的请求

Behave step matcher

ServiceWorker 向 FetchEvent.respondWith() 传递了一个承诺,该承诺以非响应值“未定义”解决。浏览器同步

在自定义中从 TextField 中关闭键盘

在自定义回调中访问验证数据

何时在自定义 UIVIew 中添加 CAAnimation?