passing/converting 从 parent 组件到 child 组件的 Elmish `dispatch` 消息

passing/converting Elmish `dispatch` messages from a parent component to a child component

在精彩的 FBlazorShop 回购中,Onur Gumus is riffing off of Steve Sanderson’s Pizza Workshop with F# flavor. On line 128 of blob/master/FBlazorShop.Web.BlazorClient/Home/Home.fs [GitHub],Onur 正在为 parent、HomeView 传递一个 Elmish Message,继承 ElmishComponent<Model, Message>,到child,PizzaConfigView,继承ElmishComponent<Model, PizzaConfigMsg>。按照惯例,我们可以看到 Message 被转换(?)为 PizzaConfigMsg

(PizzaConfigMsg >> dispatch)

其中 dispatch 的类型为 Message -> unit。在撰写本文时,我不知道这种“转换”是如何发生的(部分原因是我拒绝通过 going back to .NET core 3.x 编译此 repo)。我不熟悉 >> 运算符的这种用法。此操作实际上是转换还是其他操作?

如果您发现 >> 令人困惑,但对 |> 感到满意,那么您可以像这样轻松地重写该行:

fun pizzaMsg -> pizzaMsg |> PizzaConfigMsg |> dispatch

因为 top-level 消息类型是:

type Message =
    | SpecialsReceived of PizzaSpecial list
    | PizzaConfigMsg of PizzaConfigMsg
    | OrderMsg of OrderMsg
    | CheckoutRequested of Order

这告诉我们代码正在通过 PizzaConfigMsg 类型的值(我在上面称之为 pizzaMsg )转换为 top-level Message =17=] 联合案例,然后调度结果。

这种编码风格(函数参数变得隐式而不是显式)称为“point-free 编程”。您可以找到有关它的更多信息 here