Cmd.map 是将 Elm SPA 拆分为模块的正确方法吗?

oli*_*666 5 elm

我正在 Elm 中构建一个单页应用程序,并且很难决定如何将代码拆分为文件。

我最终使用每页 1 个模块将其拆分,并使用和Main.elm转换每个页面发出的和。HtmlCmdCmd.mapHtml.map

我的问题是 Cmd.map 和 Html.map 的文档都说

这在结构良好的 Elm 代码中很少有用,因此在接触此内容之前一定要阅读指南中有关结构的部分!

我检查了我所知道的仅有的 2 个大型应用程序:

  1. elm-spa-example 使用 Cmd.map (https://github.com/rtfeldman/elm-spa-example/blob/cb32acd73c3d346d0064e7923049867d8ce67193/src/Main.elm#L279
  2. 我无法弄清楚https://github.com/elm/elm-lang.org如何 处理这个问题。

另外,这个 stackoverflow 问题Cmd.map的两个答案都建议毫不犹豫地使用。

Cmd.map 是在模块中拆分单页应用程序的“正确”方法吗?

Jac*_*eow 4

我认为有时你只需要做适合你的事情。我对我编写的应用程序使用了Cmd.map//Sub.map方法Html.map,该应用程序有 3 个“页面”——初始化、编辑和报告。

我想让每个页面都有自己的模块,因为它们相对复杂,每个页面都有大量仅与每个页面相关的消息,并且更容易在其自己的上下文中独立地推理每个页面。

缺点是编译器不会阻止您接收给定页面的错误消息,从而导致运行时错误(例如,如果应用程序在页面Editing.Save中时接收到一个消息Reporting,那么正确的行为是什么?对于我的特定实现,我只是将其记录到控制台并继续 - 这对我来说已经足够好了(而且它从未发生过);我考虑过的其他选项包括显示一个令人讨厌的错误页面以表明发生了可怕的事情 - 如果发生了 BSOD你会的;或者简单地重置/重新初始化整个应用程序)。