gpt4 book ai didi

elm - 您如何管理更新路径/消息构造函数的爆炸式增长?

转载 作者:行者123 更新时间:2023-12-04 11:47:56 24 4
gpt4 key购买 nike

我已经完成了 Elm 指南并注意到 very simple examples , update函数增长到 3 个案例,Msg type 可以有 3 个构造函数。我想在一个中间项目中,这将增长到 20,而在高级项目中,它可能会增长到数百个。你如何管理这个?如果每个开发人员都需要为他们的功能添加一个新的构造函数,我预见这将成为版本控制争用的根源。

我参与了一个 react-redux 项目,它的概念是 combining reducers来解决这个问题。我没有在 Elm 中遇到这个概念。它有吗?

最佳答案

您可以定义 msg 类型由 child/sub msg 类型组成,当然,updater 可以与 sub 函数组合。 IE。

-- Counter


type CounterMsg
= Increment
| Decrement


type alias CounterModel =
Int


updateCounter : CounterMsg -> CounterModel -> ( CounterModel, Cmd msg )
updateCounter msg model =
case msg of
Increment ->
( model + 1, Cmd.none )

Decrement ->
( model - 1, Cmd.none )



-- Todo


type TodoMsg
= AddTodo String


type alias TodoModel =
List String


updateTodo : TodoMsg -> TodoModel -> ( TodoModel, Cmd msg )
updateTodo msg model =
case msg of
AddTodo str ->
( str :: model, Cmd.none )



-- unified


type alias Model =
{ counter : CounterModel
, todos : TodoModel
}


type Msg
= Counter CounterMsg
| Todo TodoMsg


initModel =
{ counter = 0, todos = [] }


update : Msg -> Model -> ( Model, Cmd msg )
update msg model =
case Debug.log "message" msg of
Counter countermsg ->
let
( newmodel, cmd ) =
updateCounter countermsg model.counter
in
( { model | counter = newmodel }, cmd )

-- etc...
_ ->
( model, Cmd.none )

关于elm - 您如何管理更新路径/消息构造函数的爆炸式增长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44271465/

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