Javascript React-Redux:对定义某些操作的位置感到困惑
在React Redux项目中:组件Javascript React-Redux:对定义某些操作的位置感到困惑,javascript,reactjs,redux,react-redux,redux-thunk,Javascript,Reactjs,Redux,React Redux,Redux Thunk,在React Redux项目中:组件项充当组件产品和类别的容器。 项目应始终侦听单击事件,但根据其包含的内容对事件进行不同的处理:如果它包含产品,则应发送添加到购物车,如果它包含类别,则应打开 我已经有了产品和类别的action Creator,它们目前使用redux thunk和axios处理异步API请求。打开和添加到购物车是这些动作创建者的一部分,还是该功能属于董事会的动作创建者?哪个减速机应该处理这些操作?这个问题超出了您当前提供的范围,因为您没有提到减速机的体系结构,但在任何情况下,让
项
充当组件产品
和类别
的容器。
项目
应始终侦听单击事件,但根据其包含的内容对事件进行不同的处理:如果它包含产品
,则应发送添加到购物车
,如果它包含类别
,则应打开
我已经有了产品和类别的action Creator,它们目前使用redux thunk
和axios
处理异步API请求。打开
和添加到购物车
是这些动作创建者的一部分,还是该功能属于董事会的动作创建者?哪个减速机应该处理这些操作?这个问题超出了您当前提供的范围,因为您没有提到减速机的体系结构,但在任何情况下,让我们分部分讨论:
“打开并添加到”购物车是这些动作创建者的一部分还是
该功能是否属于董事会的action creator
虽然我不完全理解你所说的董事会的
行动创造者是什么意思,但我相信,如果他们与一个创造者结合在一起,那么对行动进行推理要简单得多,例如:
function addToCart(item) {
return dispatch => dispatch({type: ADD_TO_CART, item})
}
与由不同的创建者调度相同的操作相比,您的代码更难调试,因为您可能无法完全确定哪个创建者调度了哪个操作,因此我的建议是:1 creator->1 action
同时,在将action creator与组件连接时,尽可能清晰地保留操作,这样您就不必在运行时调试代码来查看实际发生的情况,例如:
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作为视图模型,但这也取决于实现细节
在我看来,视图模型缩减器非常有用,但需要注意的是,如果操作打开
,这意味着您不仅要在这个缩减器中存储项目信息,还要存储应用程序视图的状态,因此我将其重命名为项目_打开
,这样,您还可以对其他子域执行OPEN
操作,同样,如果您正在创建OPEN
操作,您应该存储哪个项是OPEN
,并且您的reducer实际上会在应用程序中生成一个新状态
如果你不想这样(将应用程序状态作为视图模型存储在reducers中),我会删除OPEN
操作,只需通过react router或类似操作来处理
因此,根据您提供的有限信息判断,我认为您应该有两个减速机,一个用于物品,一个用于购物车,显然,ADD\u TO\u cart
操作应该由购物车减速机处理,OPEN
应该由物品减速机处理