在 scala 或 scalajs Diode 中,是否有任何现有类型符合 "updating a model that doesn't yet exist" 的用例?

In scala or scalajs Diode, do any of the existing types line up with the use case of "updating a model that doesn't yet exist"?

这是一种常见的情况:您有一个表单,并且您对该表单的提交感兴趣。您可以通过添加服务器端验证器甚至客户端验证器来增加这种情况,但提供验证器只是为了确保您提交的输入在该实例中有效;在 0 和提交之间收集的任何状态都被丢弃和附带。

这是一种不太常见的情况:您的表单有一个 password/confirm 字段,您需要以明显的方式连接该字段才能工作,并连接以显示密码强度(和有效性)的指示。过去我见过很多"write a jQuery callback for the event handler on change, and call it a day."这只是一个更极端的情况,需要中间的状态才能到达目的地,而不是作为目的本身。

现在一个非常罕见的情况:你需要跟踪这个表格的输入,因为它是美国政府用来与我们在怀俄明州核掩体中的人交流的表格。表单输入在提交时有效当然很重要,但我们还需要尽可能多地了解它到达那里的方式。例如,假设它是一个登录表单。例如,如果我们跟踪从 0 到提交的 事件序列 并将其与过去进行比较,我们就可以检测到用户行为中的异常情况。我们可以在得知登录服务器问题之前确定是否存在登录服务器问题。所以这并不总是一次性信息。

我想将事件 onChange 映射到某个 Diode 概念,但我无法弄清楚我应该做什么。以下是选项:

  1. 我可以为每个字段类型和每个置换的对象类型定义一个新的 case class,并将它们全部粘贴到根模型中(这似乎是一种愚蠢的做法)
  2. 我可以定义一个代表 "un-submitted change in input value" 的通用数据结构,它也可以指示模型和字段的变化。似乎是最佳的,但可能是不必要的,需要大量工作并且很难做好。
  3. 我可以使用现有的数据结构(例如 Pot 之一)代替我的 Scratch 数据结构。可能是最好的主意,但不确定使用哪个。

这就是我所在的位置...欢迎任何深思熟虑的建议。

这可能是使用 chat 效果更好的地方,但这里有一些关于此事的想法。

您可以在三个地方存储此类事件日志:

  1. 处于视图组件的状态。只需将带时间戳的事件添加到存储在视图状态中的列表中。提交时,将此列表与其余数据一起发送。

  2. 在二极管模型中。同样,在模型中存储事件列表并使用表单数据提交。

  3. 在服务器中。将每个事件分别发送到服务器,让它担心它们的含义。根本不需要在客户端存储。

对于这种瞬态数据,我根本不会通过 Diode 路由它,而是使用选项 1 或 3 来传输它。