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。
在精彩的 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。