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: '...' }
});
};