榆树中智能和愚蠢组件的想法

Yan*_*aim 5 elm

我喜欢React的/ Redux的智能和哑组件的概念,其中一个哑组件不处理它自己的状态(转储组件对外部世界一无所知,它只是触发事件并根据其输入显示值) .这是微不足道的,因为所有状态都在一个地方处理(主减速器).

在Elm中,每个组件都有自己的"更新"功能(类似于Redux的减速器),因此使用相同的(哑和智能组件模式)似乎并不容易.

使用智能和转储组件是榆树的好习惯吗?如果是这样,我会有没有"更新"方法的组件吗?我想知道如何将数据(props)传递给我的组件,以及如何将事件触发到父组件.

我很想听听你的想法.

Sim*_*n H 3

您可以做出的另一个聪明/愚蠢的区别是返回的组件Effects和不返回的组件之间的区别。但要回答你的问题...

没有什么可以阻止你定义孩子的行为

type Action 
  = Submit
  | Click
Run Code Online (Sandbox Code Playgroud)

并且在父级中view

Child.view (Signal.forwardTo address ChildAction) props 
Run Code Online (Sandbox Code Playgroud)

(我们通过是props因为没有模型数据可以通过)

但然后处理 Parent 中的所有操作update

case action of 
  ChildAction act ->
    case act of 
      Child.Submit -> 
        ...
      Child.Click -> 
        ...
Run Code Online (Sandbox Code Playgroud)

无论如何,如果子项中的操作的影响是改变父项或父项的其他子项的状态,那么这将是至关重要的。