У меня есть большой проект, над которым я работаю, и задаюсь вопросом о правильном способе отправки действий.Диспетчерские действия в лучших практиках Redux?
В моем контейнере для моего компонента я сопоставляю эту функцию.
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
});
Спасибо за ответ. Я отредактировал мое сообщение, чтобы включить некоторые из моих сокетов. –
Я не выполняю никаких асинхронных вызовов в своих действиях. Я просто ожидаю обратного вызова с сервера, если произошла ошибка с моим событием emit, а затем отправлена ошибка. –
, поэтому я не думаю, что с вашим подходом есть что-то не так, как это было бы очень сложно отладить позже, так как ваш код станет больше. поэтому вы используете редукс-сагу или редукцию, чтобы избежать отправки отправки в качестве аргумента. – slopeofhope