Sam*_*ton 4 components parent-child elm
我有一个带有主应用程序和组件的elm项目.
我希望该组件具有自己的内部更新,并且还能够更新主模型.
我希望组件的update功能能够运行一个Cmd将数据传递到主应用程序并更改主应用程序URL的功能.
我发现能够做到这一点的唯一方法是使用Task.perform和Task.succeed.
是否可以不使用Task.perform和Task.succeed?在这种情况下使用Task.perform和Task.succeed模式的负面影响是什么?
简短回答:
在父模型中,存储子模型的副本.并且在父更新方法中,处理孩子的消息,并调用孩子的更新功能.IE:
--In Parent
type alias ParentModel = {
childModel : ChildModel
}
Type Msg
= ChildMsg Child.Msg
case ParentMsg parentMsg ->
let
( newChildModel, childMsg ) =
Child.update parentMsg model.childModel
in
( { model | childModel = newChildModel }, Cmd.map ParentMsg childMsg )
view model =
Html.map ParentMsg (Child.view model.childModel)
...
Run Code Online (Sandbox Code Playgroud)
答案很长:父子关系更像是一种面向对象的编程风格,这在函数式语言中很难实现.就像功能编程在面向对象语言中很难做到一样.使用该语言的设计方式更容易使用.如果您对如何以功能样式组织代码感兴趣,请查看Richard Feldmans Scaling Elm视频,或者如果您有兴趣在榆树应用程序中跨多个页面组织代码,请查看此示例git repo Richard创建的
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |