У меня есть большой проект, над которым я работаю на работе, и мне интересно, как правильно отправлять действия.
В моем контейнере для моего компонента я сопоставляю эту функцию.
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));
};
Затем в моих действиях.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
});