作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
从这三个声明开始:
type SharedMsg
= SharedAction
type Page1Msg
= Page1Action
type Page2Msg
= Page2Action
type Msg
= SharedAction
| Page1Action
| Page2Action
Html.map
方法,我觉得我必须重写页面在它自己的
PageMsg
中使用的每个共享操作消息类型:
type Page1Msg
= Page1Action
| SharedAction
type Msg
= Page1Msg Page1Msg
| Page2Msg Page2Msg
view : Model -> Html Msg
view =
Html.map Page1Msg (Page1View.view model)
Msg
为所有页面键入类型,但通过在它们自己的文件夹中写入特定于页面的消息来保持模块化,然后以某种方式定义一个唯一的
Msg
通过合并它们来输入。
最佳答案
@z5h 的答案几乎是正确的,但类型构造函数必须具有不同的名称。
您无法以您想要的方式合并类型。
至于惯用方式:您可以将拆分类型命名为 Msg
,而不是 Page1Msg
.因此,例如:
第1页.榆树:
module Page1 exposing (Msg)
type Msg
= Foo
module Page2 exposing (Msg)
type Msg
= Bar
module Shared exposing (Msg)
type Msg
= Baz
module Main exposing (..)
import Shared
import Page1
import Page2
type Msg
= SomethingCustom
| SharedMsg Shared.Msg
| Page1Msg Page1.Msg
| Page2Msg Page2.Msg
Page1.View
,
Page1.Types
等,那么只要暴露的功能不重叠,就可以导入不同的同名模块,即:
import Page1.Types as Page1
import Page1.State as Page1
import Page1.View as Page1
import Page1.Decoders as Page1
关于elm - 在 Elm 中,有没有办法合并联合类型? (出于模块化目的),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43912528/
我是一名优秀的程序员,十分优秀!