这个问题超出了您提供的当前范围,因为您没有提及减速器的架构,但无论如何,让我们分部分进行:
OPEN 和 ADD_TO_CART 应该是这些动作创建者的一部分还是
此功能是否属于看板的动作创建器?
虽然我不完全理解 board's 动作创建者是什么意思,但我相信如果动作与单个创建者相结合,推理动作要简单得多,例如:
function addToCart(item) {
return dispatch => dispatch({type: ADD_TO_CART, item})
}
与由不同的创建者分派相同的动作相比,您的代码变得更难调试,因为您可能无法完全确定哪个创建者分派了哪个动作,所以我的建议是:1 个创建者 -> 1 个动作。
同时,在将动作创建器与您的组件连接时,请尽可能清晰地保持动作,这样您就不必在运行时调试代码来查看实际发生的情况,例如:
if(this.props.isItem) {
this.props.addToCart(this.props.item);
} else {
this.props.open(this.props.category);
}
代码是不言自明的,可以防止运行时出现奇怪的行为。
哪个reducer应该处理这些动作?
这是一个更棘手的问题,不仅因为我不知道您的减速器的当前结构,而且通常选择正确的架构总是很困难,但作为一般指导方针,我会说:
Always split your reducers to sub-domains of your problem
我看到您有一个名为 OPEN 的操作,这让我认为您实际上是在使用减速器作为视图模型,但这也取决于实现细节。
View Model reducer 在我看来非常有用,但是应该小心,如果你有 OPEN 操作,这意味着你不仅在这个 reducer 中存储了项目信息,而且还存储了你的应用程序视图的状态,因为这样我会将其重命名为ITEM_OPEN,这样您还可以对其他子域使用OPEN 操作,同样,如果您正在创建OPEN 操作,您应该存储哪个项目是open 和您的reducer实际上会在您的应用程序中产生一个新状态。
如果您不想要这个(将应用程序状态存储在减速器中作为视图模型),我将删除 OPEN 操作,并通过 react-router 或类似操作简单地处理它。
所以,从你提供的有限信息来看,我会说你应该有 2 个减速器,一个用于物品,一个用于购物车,ADD_TO_CART 操作显然应该由购物车减速器处理,OPEN应该由 item reducer 处理。