【发布时间】:2018-07-03 14:08:04
【问题描述】:
假设我想创建一个包含两个组件的网页,例如 Navbar 和 Body。这两个组件互不交互,可以独立开发。所以,我有两个 elm 文件,每个文件中都有以下组件:
type Model = ...
type Msg = ...
init : (Model, Cmd Msg)
update : Msg -> Model -> (Model, Cmd Msg)
view : Model -> Html Msg
假设它们都工作正常,我们如何组合它们来制作一个同时具有这两个组件的程序?
我试着写这样的东西:
type Model = {body : Body.Model , navbar : Navbar.Model}
type Msg = BodyMsg Body.Msg | NavbarMsg Navbar.Msg
view : Model -> Html Msg
view model = div [] [Body.view model.body, Navbar.view model.navbar]
update : Msg -> Model -> (Model, Cmd Msg)
update = ...
当我尝试编写这个更新函数时,上面的内容很快就变得丑陋了。特别是,一旦我从Navbar.update 或Body.update 将Msg 从Cmd 的更新函数中提取出来,我该如何提取它们并将它们再次反馈给这些函数?另外,上面的视图函数看起来也不是特别地道。
elm-architecture 推荐的解决此问题的方法是什么?这种模式在 elm 架构中是惯用的吗?
【问题讨论】:
标签: elm composition elm-architecture