2017-01-16 2 views
2

내 반응 응용 프로그램에서 나는 긴 폴링 API를 사용하고 있습니다. 모든 응답에 대해 자동으로 요청을 보내려면 미들웨어를 사용하십시오. 하지만 새로운 요청을 보내기 전에 저장 한 데이터를 저장해야합니다. 그것보다 더, 나는 내 미들웨어 내부에 또 다른 액션을 보내고 싶다. 그래서 내 구조는 다음과 같습니다상태 가져 오기 및 미들웨어에서 파견

InitLongPoll() -> 위치한 sendRequest (데이터) -> ReceiveResponse (데이터) * -> 위치한 sendRequest (데이터)

'*'내 미들웨어이다. 거기에서 나는 store.dispatch(responseData)을 사용하여 상점에 데이터를 저장하고 store.dispatch(sendRequest(authData))을 사용하여 새 요청을 보냅니다.

store.getState().authReducer을 사용하여 authData를 수신해도 괜찮습니까? 내가 아는 한, 내 미들웨어는 순수한 함수 여야하며 외부 데이터 (저장소)에 의존해서는 안됩니다. 미리 감사드립니다.

답변

3

store.getState(). authReducer?를 사용하여 authData를 수신해도 괜찮습니까? 내가 아는 한 내 미들웨어는 이어야하며 외부 데이터 (저장소)에 의존해서는 안됩니다.

예입니다. 미들웨어는 redux 루프에 부작용을 도입하는 방법이며 순수 함수가 될 수 없습니다. 자신의 미들웨어는 서버를 폴링하는 부작용이 있습니다.

  1. 함수는 항상 동일한 인수 값 (S)을 소정의 동일한 결과 값을 평가 :

    REDUX 미들웨어로 정의 순수한 함수의 항 논문이다. 함수 결과 값은 숨겨진 정보 또는 프로그램 실행 진행 중 또는 프로그램 실행간에 변경 될 수있는 상태에 의존 할 수 없으며 은 I/O 장치 (일반적으로 아래 참조)의 외부 입력에 종속되지 않습니다.

  2. 결과를 평가해도 변경 가능한 객체의 변이 또는 I/O 장치 (일반적으로 아래 참조)에 대한 출력 과 같이 의미 론적으로 관찰 가능한 부작용이나 출력이 발생하지 않습니다.

당신은 또한 사용의 redux-thunk 소스 코드에서 볼 수 getState :

function createThunkMiddleware(extraArgument) { 
    return ({ dispatch, getState }) => next => action => { 
    if (typeof action === 'function') { 
     return action(dispatch, getState, extraArgument); 
    } 

    return next(action); 
    }; 
}