gpt4 book ai didi

components - 在不使用任务的情况下从组件调用更新函数

转载 作者:行者123 更新时间:2023-12-05 00:48:46 25 4
gpt4 key购买 nike

我有一个带有主应用程序和组件的 elm 项目。

我希望组件有自己的内部更新,并且还能够更新主模型。

我想要组件的 update能够运行 Cmd 的函数它将数据传递给主应用程序并更改主应用程序 url。

我发现能够做到这一点的唯一方法是使用 Task.performTask.succeed .

是否可以在不使用 Task.perform 的情况下执行此操作?和 Task.succeed ?
使用 Task.perform 的缺点是什么?和 Task.succeed在这种情况下的模式?

最佳答案

简短的回答:

在您的父模型中,存储子模型的副本。并且在parents的update方法中,处理child的消息,调用child的update函数。 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)
...

长答案:
父子关系更像是一种面向对象的编程风格,这在函数式语言中是很难做到的。正如函数式编程在面向对象语言中很难做到一样。使用该语言的设计方式要容易得多。如果您对如何以函数式风格组织代码更感兴趣,请查看 Richard Feldmans Scaling Elm video或者,如果您有兴趣在 elm 应用程序中跨多个页面组织代码,请查看此 example git repo Richard created

关于components - 在不使用任务的情况下从组件调用更新函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48890416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com