我在理解究竟是什么Html msg类型或者如何使用它时遇到了一些麻烦.我在VirtualDom.elm中找到了这行代码,它Html msg似乎是别名:
type Node msg = Node
Run Code Online (Sandbox Code Playgroud)
这看起来像具有一个类型参数的通用联合类型msg,以及一个不包含其他信息的简单案例.我在想:
div函数如何构造这些对象之一?Html msg只是支持Elm编译器/运行时的神奇类型?hal*_*bra 11
Html msg是一个类型别名的Node msg,这是一种通用型联盟
Node msgNode msg在Elm Architecture的上下文中推断类型签名是有意义的,其中除了标志之外Http.App.programWithFlags,应用程序的所有输入都通过消息发生.
msg类型变量Node msg只是暗示你的想法,来自你的DOM子树的所有消息都应该属于一个联合类型.
node
: String
-> List (Attribute msg)
-> List (Html msg) -- List of children nodes with a msg
-> Html msg -- Produced DOM node
Run Code Online (Sandbox Code Playgroud)
div函数如何使用泛型联合类型感谢msg类型变量,Elm编译器知道,当您的DOM树在Elm Architecture的上下文中是正确的时.
在JavaScript中Node,Node msgUnion Type的世界值表示具有以下结构的对象:
{
"type":"node",
"tag":"div",
"facts":{}, // Attributes and DOM events
"children":[], // Children, have the same structure
"descendantsCount": 0 // Used for Virtual DOM diffing
}
Run Code Online (Sandbox Code Playgroud)
大多数复杂的核心数据结构都是使用通用联盟类型实现的,请检查Maybe或Dict以获得灵感.
Html msg 和用户定义的通用联合类型Html msg 特别是有点神奇,但你可以实现一些有趣的结构,如链表或其他树状结构.
type List a =
Empty | Node a (List a)
Run Code Online (Sandbox Code Playgroud)