在Redux最佳实践中调度操作?

时间:2016-08-29 21:52:30

标签: reactjs containers redux dispatch event-dispatching

我有一个大型项目,我正在工作,并想知道发送行动的正确方法。

在我的组件容器中,我映射了这个函数。

const mapDispatchToProps = (dispatch) => {
    return {
        ackMessage:(convo)=> {
        chatSocketService.messageAcknowledge(convo, dispatch);
    }
}

您可以看到我将调度功能传递给我的服务。

我需要传递调度,以防套接字事件失败,我可以在服务中调度错误操作。

这样做可以吗?或者总是将调度保存在容器中会更好。如果我将该套接字服务函数转换为承诺我可以做到这一点但是我们可能会在容器中的调度函数中添加太多逻辑?

将调度对象传递给ok吗?

编辑:这是我的套接字服务的片段。在我的套接字发出错误事件时,我需要调度错误:

const chatSocketService = {
      messageAcknowledge(convo, dispatch) {
       const socketConnection = getSocket();
         socketConnection.emit(socketMessages.ACKNOWLEDGE_MESSAGE, {convoID:convo.convoID, msgID:convo.lastMsg.msgID }, 
            (response)=> {
              socketError(response, convo, dispatch);
             });
      }
}

const socketError = (response, convo, dispatch) => {
  if (response.error === CHAT_SESSION_EXPIRE) {
    sessionExpire(dispatch);
  } else if(response.error) {
   dispatch(convoError(convo.convoID, true));
  }
};

const sessionExpire = (dispatch)=> {
  dispatch(disconnectedMessage('Session has expired. Please log out and log back in'));
  dispatch(socketDisconnected(true));
};

然后在我的actions.js中我有这些行动:

export const CONVO_ERROR = 'CHAT_CONVO_ERROR';
export const convoError = (convoID, error) => ({
  type:CONVO_ERROR,
  convoID,
  error
});

export const SOCKET_DISCONNECTED = 'CHAT_SOCKET_DISCONNECTED';
export const socketDisconnected = (disconnected)=> ({
  type:SOCKET_DISCONNECTED,
  disconnected
});

1 个答案:

答案 0 :(得分:0)

我认为您应该将调度函数保留在容器内,并在不同的文件中分离出异步api调用,并导入该函数以在此文件中使用。还告诉我们你是如何使用redux-thunk或redux-saga进行像chatSocketSevice这样的异步调用..我觉得我可以更有帮助。