在Elm-Html中有没有一种方法可以生成一个空的Html节点?

18
我正在编写一个用于显示错误消息的函数,因此在我的视图中,我有类似以下的东西:

{{ error_message }}


我正在编写一个显示错误消息的函数,在我的视图中会有类似以下的代码:

{{ error_message }}

div [] [ displayErrors model ]

如果没有错误,我该如何让displayErrors返回一些被解释为一个空的Html节点的东西?

2个回答

30

您可以使用一个空字符串和Html.text节点:

emptyNode = Html.text ""

3
这段话的意思是:“这会被优化掉吗?我担心使用这些幽灵节点会触发某些CSS规则,从而导致意外的结果。”请注意,翻译时需要保持原文的意思,同时使语言更加通俗易懂。 - jz87
@jz87 看起来好像没有任何东西被渲染。 - rpearce

10

@robertjlooby的回答看起来对我来说完全没问题。

然而,如果您真的不想有任何节点,您可以让displayErrors返回一个Maybe (Html msg)

然后,您可以将您的代码更改为以下内容:

import Maybe.Extra exposing (maybeToList)

div [] ( displayErrors model |> maybeToList )

displayErrors返回Nothing时,div会变得真正为空。

注意:您可以使用以下命令安装Maybe.Extra模块:

elm package install elm-community/maybe-extra

是的,这是一个不错的解决方案。唯一的问题是,如果我在列表中使用它。例如:div [] [ stuff,(displayErrors model |> maybeToList)],这并不真正起作用。我想现有的Html函数签名没有真正好的方法来解决这个问题。也许返回签名应该是Maybe (Html Msg)而不是Html Msg。 - jz87
1
在这种情况下,您可以连接列表:div [] ([stuff] ++ (displayErrors model |> maybeToList)) - Zimm i48

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接