在 Elm 中没有消息的 Cmd

Posted

技术标签:

【中文标题】在 Elm 中没有消息的 Cmd【英文标题】:Cmd with no message in Elm 【发布时间】:2018-06-30 05:50:06 【问题描述】:

是否可以在 Elm 中创建一个在完成时不发送消息的 Cmd

具体来说,我试图让一个元素抓住焦点(以编程方式),但我不需要知道结果:

Dom.focus "element-id"
    |> Task.attempt FocusReceived
...
FocusReceived result ->
    model ! []  -- result ignored

有没有办法让 Elm“引擎”在 Cmd 之后不发送消息?

我知道我的代码 (FocusReceived result -> model ! []) 是无操作的,但我希望根本不发送消息。

【问题讨论】:

【参考方案1】:

不,Msg 始终是必需的。在典型的 Elm 项目中,一个常见的习惯用法是包含一个 Msg 类型的构造函数,它什么都不做,名为 NoOp

type Msg
    = NoOp
    | ...

update 函数的作用与您示例中的 FocusReceived 相同,即什么也不做。

case msg of
    NoOp ->
        model ! []
    ...

【讨论】:

这就是我的怀疑。就我而言,我将让主要的update 函数也触发一个将状态保存到外部存储的命令,所以我想要一种方法来忽略对状态没有影响的命令。谢谢。

以上是关于在 Elm 中没有消息的 Cmd的主要内容,如果未能解决你的问题,请参考以下文章

如何在Elm中获取svg文本的长度

如何在Elm中以GMT显示当前时区偏移量

从 Elm 中的 HTTP 响应中读取自定义标头

Webmethod在ajax调用中没有被击中

ELM学习

用elm组件,新增和编辑用同一个弹窗,数据不清空