Redux 中间件中的分派导致错误类型的操作

Redux 中间件中的分派导致错误类型的操作,redux,react-redux,Redux,React Redux,我试图创建一个简单的中间件来处理套接字事件 const join = (channel) => (dispatch) => { dispatch({ type: 'ACTION-1', socketChannel: {...}, events: [...], }); }; 我发出这个触发它的动作。现在,当在我的中间件中调用类型为“ACTION-2”的dispatch方法并将socketData作为有效负载接收时,我在控制台中看到两次触发了什么“ACTION-1”,最

我试图创建一个简单的中间件来处理套接字事件

const join = (channel) => (dispatch) => {
 dispatch({
  type: 'ACTION-1',
  socketChannel: {...},
  events: [...],
 });
};
我发出这个触发它的动作。现在,当在我的中间件中调用类型为“ACTION-2”的dispatch方法并将socketData作为有效负载接收时,我在控制台中看到两次触发了什么“ACTION-1”,最后一次是在socketData有效负载中触发的

我想知道为什么注册了'ACTION-1'而不是'ACTION-2',以及如何修复它?谢谢你的帮助

import { socket } from 'services/socket';

const socketMiddleware = ({ dispatch }) => next => (action) => {
  const {
    channel,
    events, // an array of events for the channel
    ...rest
  } = action;


  if (typeof action === 'function' || !channel) {
    return next(action);
  }

  const {
    type,
    name,
  } = channel;


  const channelInstance = socket.instance[type](name);

  events.forEach((event) => {
    const handleEvent = (socketData) => {
      dispatch({ type: 'ACTION-2', socketData, ...rest });
    };
    channelInstance.listen(event.name, handleEvent);
  });

  return next(action);
};

export {
  socketMiddleware
};

看起来您在初始分派中没有对通道进行路径选择,并且在以下情况下,您的中间件在该通道中失败:

if (typeof action === 'function' || !channel) {
  return next(action);
}
为解决此问题,您应在调度中添加频道:

const join = (channel) => (dispatch) => {
 dispatch({
  type: 'ACTION-1',
  socketChannel: {...},
  events: [...],
  channel: { type: '...', name: '...' }
 });
};