繁体   English   中英

使用Redux最佳做法调度操作?

[英]Dispatching actions in Redux best practices?

我有一个正在处理的大型项目,想知道分配动作的正确方法。

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

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

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

我需要传递分派,以便万一套接字事件失败,我可以在服务内部分派一个错误操作。

这样可以吗? 还是将分发始终保留在容器中会更好。 如果我把那个套接字服务功能变成了一个承诺,那么我可以做到这一点,但是那我们可能会在容器中的派遣功能中添加太多逻辑了吗?

是否可以通过分发对象?

编辑:这是我的套接字服务的代码段。 从套接字发出错误事件时,我需要调度一个错误:

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
});

我认为您应该将分派功能保留在容器内,并在另一个文件中分离异步api调用,然后导入该函数以在此文件中使用。 还向我们展示您如何使用redux-thunk或redux-saga进行诸如chatSocketSevice之类的异步调用。我觉得那么我可能会有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM