我正在尝试使用 purescript-thermite 来构建使用 websockets 的应用程序。这个想法是应用程序使用 websockets 连接到某个服务器并实时更新 HTML 页面。但是,我找不到如何将其连接到铝热剂工作流程的方法。

我有一个由 specrender 组成的 performActionrender 可以访问 dispatch 函数。但是,我需要在渲染元素之前启动 websockets(我可能可以将它放入 main 中),但是在收到消息后,我需要理想地从外部将事件 dispatch 发送到组件。最好的方法是什么?

最佳答案

期望您渲染组件,获取驱动程序函数的句柄,然后设置 websocket 连接并使用驱动程序函数提供更新。

但是,如果您出于某种原因需要首先设置 websocket 连接,那么您将需要使用一些技巧,可能涉及一个 Ref 在设置完成后保存驱动程序功能。这样,您需要在 Ref 更新之前手动验证您没有尝试调用驱动程序函数。

更高级的解决方案可能是以协程的形式包装您的 websocket 协议(protocol)(请参阅 purescript-coroutines ),并在类型中明确表示任何设置阶段:

type Connection =
  Aff MyEffects { initialData :: InitialData
                , updateStream :: Producer (Aff MyEffects) UpdateMessage
                }

在这里,InitialData 表示您在设置时收到的数据,这些数据可能会传递给组件,而 UpdateMessage 表示您从服务器获取的增量更新,这些数据将传递给驱动程序函数。然后,您可以将所有这些连接到 main 中。

关于Purescript 铝热剂和 websockets,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37287369/

10-13 09:11