【问题标题】:Mapping Msg using NoMap in Elm with http request on init在 Elm 中使用 NoMap 在初始化时使用 http 请求映射 Msg
【发布时间】:2018-07-02 20:57:59
【问题描述】:

我正在构建我的第一个 Elm 应用程序,并且我正在根据这些来源构建它:

How i structure elm apps

NoMap approach with Domain focus

这意味着我将我的 Msg 类型从我的主要 Types.elm 映射到我的子函数。做一个简单的onClick 函数时看起来像这样

onClick (MsgForPieChart <| SelectSlice <| sliceModel.points)

现在我想在 init 上获取一些数据以供查看。

我尝试采用与简单 onClick 函数相同的方法

getWarAndPeace : Cmd Msg
getWarAndPeace =
    Http.send (MsgForMuseums <| FetchedMuseums) <|
        Http.getString "https://example.com/books/war-and-peace.md"

我的主要类型如下所示:

type Msg
= MsgForPieChart Atom.PieChart.Types.Msg
| MsgForMuseums Organism.Museums.Types.Msg 
| NoOp

对于http 请求,我的子函数类型看起来像这样

type Msg = 
FetchedMuseums (Result Http.Error String)

但无论我尝试什么,我都会不断收到来自 Http.sendTask 或任何我尝试的方法的类型错误

Result Http.Error a -> App.Types.Msg

但它是:

App.Types.Msg

我的更新函数的结构如下:

update : App.Types.Msg -> Organism.Museums.Types.MuseumsModel -> Organism.Museums.Types.MuseumsModel
update msgFor model =
case msgFor of
    MsgForMuseums msg ->
        updateMuseums msg model
    _ ->
        model


updateMuseums : Organism.Museums.Types.Msg -> Organism.Museums.Types.MuseumsModel -> Organism.Museums.Types.MuseumsModel
updateMuseums msg model =
    case msg of
        FetchedMuseums data -> model

那么我如何在初始化时为我的子函数获取 http 请求,该函数使用 NoMap 模式来组合 Msg

【问题讨论】:

  • 试试Http.send (MsgForMuseums &lt;&lt; FetchedMuseums)?
  • 这似乎可以解决问题,这让我遇到了另一个问题,我不能从子函数 init 调用 Cmd Msg?然后将其放在我的主初始化中

标签: types functional-programming elm elm-architecture


【解决方案1】:

按照 Dogbert 的建议使用 Http.send (MsgForMuseums &lt;&lt; FetchedMuseums) 确实解决了问题

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2016-04-22
    • 1970-01-01
    相关资源
    最近更新 更多