微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

试剂 - 将 ui 状态与服务器持久状态一起或分开?存储的方法?

如何解决试剂 - 将 ui 状态与服务器持久状态一起或分开?存储的方法?

我在名为 app-state 的地图中使用了多个原子,到目前为止,它在架构上运行良好。分布在这些原子上的状态是规范化的,反映它存储在 datomic 中,当然,客户端初始化的内容是 datomic 中的特定子集。这是我准备尝试使用 datascript 的方式(这让我明白为什么即使不使用 datascript,客户端状态也能更好地完全标准化)。

此时我有一个问题。我们都知道,试剂中的某些状态反映了服务器数据库中的内容(通常),但试剂中的状态也仅与 ui 的当前状况有关。当页面重新加载时,该状态将消失,并且(通常)无需将其存储在服务器上。

所以,我正在查看我的原子列表并意识到我有一些原子保存了类似数据库记录的映射,即它们包含原子实体的精确反射(通过传输到达),这很棒。

但现在我注意到我还想要每个数据实体的一些 ui 状态。 因此,问题出现了是否(这对我来说似乎是错误的)添加一些来自 datomic 的键,即与 datomic 无关但客户端需要的 ui 状态(即,将其转储到同一个嵌套映射中)。这是完全可能的,但似乎是错误的,因此建议....(这是我目前的想法),每个“实体”的并行原子怎么样,例如 @<entity-name>-ui,包含一个地图(或者甚至是一个地图向量,如果有多个实体),以及一组用于 ui 状态的键。

这似乎比我现在认的结果有所改进,它是每个 ui 状态的单独原子(到目前为止我已经避免了组件本地状态)。 (目前ui一次只保存一个记录的ui状态,所以这些ui原子只需要关心一个当前实体)

但是,如果说,我创建了一个并行原子(为了避免混合临时用户界面和服务器状态),那么用户界面状态可能可以更深入地扩展。例如,我们可以保存每个实体的 ui 状态,因此来回切换当前实体会记住 ui 状态。

由于这是 Stack Overflow,我必须提出一个具体问题,而不仅仅是讨论,因此:鉴于我所描述的内容在这种情况下,有哪些合理的架构选择可以将状态存储在试剂中?

解决方法

如果您已经将应用状态存储在多个独立于组件的试剂原子中 - 您可以检查 https://github.com/day8/re-frame,这是一个广泛采用的试剂驱动框架,完全适合您的情况。本质上,它将所有应用程序状态存储在一个试剂原子中,但具有完善的基础设施来支持协调存储和更新。他们有精彩的documentation,对这个想法有很好的高级解释。 关于您关于服务器/用户界面状态分离的最初问题 - 我认为您绝对应该这样做。它将为您提供一种更好的分离关注点的方法,并为您提供一种更简单的方法来单独更新服务器/用户界面数据。通过将状态的两个部分存储在重新构建应用程序数据库中的单独顶级键下,使用 re-frame 很容易实现这一点。例如

{:server {:entity-name ...} 
 :ui     {:entity-name ...}}

然后创建合适的订阅(请参阅重新构建文档)以检索它。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?