2016-08-29 3 views
0

나는 직장에서 일하고 있으며 적절한 행동을 파견하는 방법에 대해 궁금해하는 커다란 프로젝트가있다.Redux 모범 사례에서 작업 파견?

내 구성 요소의 컨테이너에이 함수를 매핑합니다.

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

내 서비스로 발송 기능을 전달하고 있습니다.

소켓 이벤트가 실패 할 경우 서비스 내부에서 오류 조치를 전달할 수 있도록 디스패치를 ​​전달해야합니다.

괜찮습니까? 또는 항상 컨테이너에 파견을 유지하는 것이 더 낫습니다. 그 소켓 서비스 기능을 약속으로 바꾸면 컨테이너에서 디스패치 기능에 너무 많은 로직을 추가 할 수 있습니다.

디스패치 객체를 확인 주위로 전달하고 있습니까?

편집 : 여기에 내 소켓 서비스 스 니펫이 있습니다. 내가 오류를 파견 할 필요가 방출 내 소켓에서 오류 이벤트에 : 나는 당신이 용기 내부의 파견 기능을 유지해야한다고 생각

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

답변

0

:

내 actions.js에서 다음
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)); 
}; 

나는 이러한 작업이 다른 파일에서 비동기 api 호출을 분리하고이 파일에서 사용할 함수를 가져옵니다. 또한 redux-thunk 나 redux-saga를 사용하여 chatSocketSevice와 같은 비동기 호출을 작성하는 방법을 보여줍니다. 그러면 나는 더 도움이 될 수 있다고 생각합니다.

+0

답장을 보내 주셔서 감사합니다. 내 소켓 서비스 중 일부를 포함하도록 게시물을 편집했습니다. –

+0

내 작업에서 비동기 호출을 수행하지 않습니다. 내 emit 이벤트에 오류가있는 경우 서버에서 콜백을 기다리는 중 오류가 발생했습니다. –

+0

그래서 코드가 커질수록 나중에 디버깅하기가 어려울 것 이외에 다른 방법으로 문제가 있다고 생각하지 않습니다. 그래서 당신은 인자로 전달을 피하기 위해 redux-saga 또는 redux thunk를 사용합니다. – slopeofhope

관련 문제