我正在使用 Redux(+React) 对分层结构进行操作,我有两个问题:
- 如何在 Redux 中实现多态?
- 如何让“动作冒泡”
我的问题表达得更准确:
- .
我正在使用 Redux 在 React 中制作结构代码编辑器。通过结构编辑器,我的意思是我有带有节点的树结构,我的应用程序应该在 AST 而不是纯文本上运行。
这些节点可以有各种类型(因为它是编辑 CSS 文件的编辑器,这些类型例如:“规则”、“声明”、“属性”、“值”,但更重要的是它们确实有一些类型) . 所以 JS 中有一些对象具有属性type
,它type
决定了它的...类型;)
所以假设我有这样的节点:
{
type: 'property',
id: 4,
rule: '.content > ul > li',
children: [...blah blah......]
}
我希望能够写出这样的东西:
store.dispatch({type: 'click', nodeId: 4})
点击。但我希望点击 node of typerule
会产生其他效果,而不是点击 node of type property
。多态性(但我希望有一个反应组件<Node />
来防止代码重复)。
我知道我可以通过 switch/case 或制作我自己的子功能来实现这一点(我的意思是将操作委托给功能),但我不想重新发明轮子。我认为对多态性的支持将对许多应用程序有用,而不仅仅是我的应用程序。
那么——如何在 Redux 中实现多态性?
2.
关于动作冒泡的第二个问题。因为我得到了树结构,例如这样的:
{
type: 'rule',
rule: 'body div',
id: 1,
children: [
{
type: 'declaration',
id: 2,
children: [
{type: 'property', name: 'display', id: 3},
{type: 'value', value: 'block', id: 4},
]
}
]
}
而且我有适当的 React 组件来呈现该结构(我有基于哑函数的无状态 React 0.14 组件,所以我不认为组件的代码现在非常重要)。无论如何,我得到<Node/>
了代表单个 AST 节点的组件。
我希望该用户可以单击例如 id=3 ( {type: 'property', name: 'display', id: 3},
) 处的节点,并且操作会自动“冒泡”到节点的父节点(在本例中为 id=2 的声明节点和 id=1 的规则节点)。
据我所知,Redux 中没有“动作冒泡”。也许应该是?或者也许我想实现的目标可以通过其他方式实现?(通过“动作冒泡”,我的意思是类似于浏览器中 JavaScript 事件中的“事件冒泡”,只是我想redux actions
冒泡,我不希望 DOM 事件冒泡(这完全是另一回事)。我想减少动作冒泡。当我写“冒泡”时,我关注的是整体设计模式而不是实现。
这是我的两个问题:)