我正在尝试在我的一个项目中使用 Flux 架构。
我的一些操作具有需要满足的先决条件才能允许分派该操作。
目前,这个先决条件检查逻辑在我的视图代码中,像这样(伪代码):
class FooView {
void OnButtonClick() {
if (FooStore.IsButtonClickAllowed) {
Dispatch(ButtonClickAction);
}
}
}
这对我来说看起来很尴尬,因为现在我的视图里面有业务逻辑代码。我很想把这个检查代码放到我的商店里,但我做不到。我有不止一个商店来处理这个动作,只有一个商店知道它是否有效。所以它不起作用:
class FooStore {
void Handle(Action) {
if (Action is ButtonClickAction) {
if (IsButtonClickAllowed) {
FooData.Something();
} else {
// Ignore
}
}
}
}
class BarStore {
void Handle(Action) {
if (Action is ButtonClickAction) {
BarData.Something();
}
}
}
我无法判断BarStore
是否ButtonClickAction
允许,除非我“ WaitFor(FooStore)
”然后询问它,但这将导致处理此操作的每个商店都包含相同的检查,从而导致一些非常混乱的事情。
到目前为止,我了解到 Flux 中的 Action 只有在保证允许的情况下才会被调度,即在调度之前需要检查 Action 的有效性。这意味着这个验证需要在视图中?
上面按钮示例的解决方案可能很简单:“在不允许的时候隐藏按钮,它永远不会发生”。但是假设我有一个 Action 在用户点击空格键时被调度,我该怎么办?当不允许发生操作时,我无法从用户键盘上删除空格键。
PS 我没有使用 React,所以问题纯粹是关于 Flux 架构风格,我什至没有使用 JavaScript。