欢迎!请参阅 关于 页面了解更多此功能的信息。
我正在将一个 JS 库移植到 clojure(以及可能 cljs),我在考虑本地状态方面遇到了困难。设想一个场景,您通过 WebSocket 进行 RPC,服务器回复的内容取决于已经发送给您的服务器内容。那么您将要保留一个本地的服务器回复缓存。
在面向对象的世界中,您应该封装套接字和缓存,并为库用户提供一个接口,该接口发送 RPC 并透明地处理缓存填充和从缓存中获取结果。那么在 clojure[-script] 中,什么是做同样事情的惯用方法?我只需要返回一个映射,并期望我的函数将其作为第一个参数,返回更新后的状态以及 RPC 结果吗?
是的,使状态明确,作为参数传递。不要使用全局状态。也不要使用动态变量。不要假设特定的状态框架,如Integrant或Component。
这样消费者将具有最大的灵活性和简单性。
你用JS处理这个问题的方式没有问题。它类似于例如任何有状态的转换器的运作方式。