滥用Redux减速器的现实后果?

时间:2016-12-15 14:46:27

标签: javascript redux

我继承了Redux代码库,我发现了一些违反Redux基本规则的代码:在reducers中没有副作用。

具体来说,有一个tracking减速器,它看起来像这样:

function tracking(state = {}, action) {
  function sendEvent(event, data) {
    // API call here to send a tracking event
  }

  switch (action.type) {
    case TRACK_FRIEND_REQUEST:
      sendEvent('track-friend-request', action.payload);
      return state;

    case TRACK_LINK_CLICK:
      sendEvent('link-click', action.payload);
      return state;
  }
}

这显然是错的;国家毫无意义,只存在副作用。正确的解决方案(IMO)是创建一个tracking中间件,用于侦听具有meta属性的操作,并将meta属性附加到实际事件,而不是创建这些专门的赛道事件。

但令人惊讶的是,我无法通过这种方式找到使用它的任何实际后果,而且我很难证明为什么值得努力修复它(有一个很多这些跟踪事件,所以这将是一项相当多的工作。)

我看到的唯一潜在问题是,在使用devtools时,只要您切换操作,就会重新发送事件。我们已经忽略了开发模式下的跟踪操作,所以这不是一个问题。

还有其他原因导致此代码会导致我不知道的实际问题吗?

1 个答案:

答案 0 :(得分:2)

是的,你已经死了。主要问题是在使用Redux DevTools时进行调试。在先前调度的操作之间来回切换将导致通过reducers再次调度这些操作,从而重新触发此行为。

是的,"正确"这种事情的地方将是一个中间件。