Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript React-Redux:对定义某些操作的位置感到困惑_Javascript_Reactjs_Redux_React Redux_Redux Thunk - Fatal编程技术网

Javascript 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请求。打开和添加到购物车是这些动作创建者的一部分,还是该功能属于董事会的动作创建者?哪个减速机应该处理这些操作?这个问题超出了您当前提供的范围,因为您没有提到减速机的体系结构,但在任何情况下,让

在React Redux项目中:组件
充当组件
产品
类别
的容器。
项目
应始终侦听单击事件,但根据其包含的内容对事件进行不同的处理:如果它包含
产品
,则应发送
添加到购物车
,如果它包含
类别
,则应打开


我已经有了产品和类别的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
应该由物品减速机处理