代码之家  ›  专栏  ›  技术社区  ›  Ulrar

elm状态转换消息

  •  2
  • Ulrar  · 技术社区  · 6 年前

    this . 虽然不是最近的,但我试过了,结果很不错,和以前相比。但试图把它应用到我的状态,我发现自己想要创造空的 Cmd 只是想发一封信 Msg 到“根”更新函数,从一个 State 这似乎不对,我想我只是做错了。

    假设我有这个:

    type alias Model =
      { state : State
      }
    
    type State = StateProjectList ProjectList.Types.Model
               | StateProjectView ProjectView.Types.Model
    
    type Msg = ProjectList ProjectList.Types.Msg
             | ProjectView ProjectView.Types.Msg
             | TransitionProjectView Project
    

    当我在的时候 StateProjectList StateProjectView 但它的视图函数返回 ProjectList.Types.Msg 味精 . 我想到的一个办法是创建一个空的 命令 那会用 TransitionProjectView ,这似乎不对。

    ProjectList TransitionToProjectView

    我确实看到了那张纸条 Cmd.map 的医生说,如果你需要这个,你可能是做错了什么,不幸的是,链接解释做什么,而不是死了。 如果这一切都是错误的,那么从一种状态过渡到另一种状态或者更好的体系结构的正确方法是什么?

    1 回复  |  直到 6 年前
        1
  •  4
  •   glennsl Namudon'tdie    6 年前

    这通常是通过使用路由来完成的。我还没有迁移到0.19,这会稍微改变导航的细节,但是基本思想在0.19和0.18中是一样的。为您的路由生成一个URL并用该URL呈现一个链接,或者使用 Navigation.modifyUrl 从elm lang/导航0.18或 Browser.Navigation.pushUrl elm/browser Cmd msg .

    Navigation URL Parsing Elm SPA example 总是个好主意。

    如果出于某种原因不想使用路由,请启用匹配 ProjectList TransitionToProjectView 在根目录中,更新函数似乎是一种不错的方法。或者,不使用 Html.map ,您可以让父级传递给子级 Child.Model -> Msg 子级可以用来包装消息本身的函数,因此也可以直接使用父级消息。