[英]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.