在React Redux项目中:组件Item
充当组件Product
和Category
的包含。
Item
应始终侦听点击事件,但会根据其包含的内容以不同方式处理事件:如果事件包含Product
,则应分派ADD_TO_CART
和OPEN
它包含Category
。
我已经拥有了目前使用redux-thunk
和axios
处理异步API请求的产品和类别的动作创建者。 OPEN
和ADD_TO_CART
应该是这些行动创作者的一部分,还是这个功能属于董事会的行动创作者?哪个减速机应该处理这些动作?
答案 0 :(得分:1)
这个问题超出了您提供的当前范围,因为您没有提及减速器的架构,但无论如何,让我们按部分进行:
OPEN和ADD_TO_CART应该是这些行动创作者的一部分还是 这个功能是否属于董事会的行动创造者?
虽然我并不完全明白board's
动作创作者的意思,但我相信如果他们与单个创作者合作,那么推理行动要简单得多,例如:
function addToCart(item) {
return dispatch => dispatch({type: ADD_TO_CART, item})
}
而不是由不同的创建者调度相同的操作,那么你的代码变得更难调试,因为你可能不完全确定哪个创建者调度了哪个动作,所以我的建议是:1 creator - > 1动作。
同时,在将动作创建者与组件连接时,尽可能清楚地保持动作,这样您就不必在运行时调试代码以查看实际发生的情况,例如:< / p>
if(this.props.isItem) {
this.props.addToCart(this.props.item);
} else {
this.props.open(this.props.category);
}
代码是不言自明的,可防止运行时出现奇怪的行为。
哪个减速机应该处理这些动作?
这是一个更棘手的问题,不仅仅是因为我不知道你的减速器的当前结构,而是一般选择正确的架构总是很困难,但作为一般指导我会说:
Always split your reducers to sub-domains of your problem
当我看到你有一个名为OPEN
的动作时,我认为你实际上是在使用你的reducer作为视图模型,但这也取决于实现细节。
View Model Reducer在我看来非常有用,但是应该注意,如果你有动作OPEN
,这意味着你不仅要存储项目信息,还要存储应用程序视图的状态。 ,因此我会将其重命名为ITEM_OPEN
,这样您也可以对其他子域进行OPEN
操作,同样,如果您要创建OPEN
操作,则应将其存储为item为open
,您的reducer实际上会在您的应用程序中生成一个新状态。
如果你不想要这个(在Reducer中将应用程序状态存储为View Model),我会删除OPEN
操作,只需通过react-router或类似操作处理它。
因此,根据您提供的有限信息判断,我会说您应该有2个减速器,一个用于物品,一个用于购物车,ADD_TO_CART
动作显然应该由推车减速器处理,OPEN
动作{1}}应由项目缩减器处理。