2016-07-14 3 views
2

비디오 강의에서 : https://egghead.io/lessons/javascript-redux-dispatching-actions-asynchronously-with-thunks 우리는 행동 창조자에게 비동기 & 번의 파견 요청을 할 수 있도록 우리 자신의 썽크를 쓰는 법을 배웁니다. 나는 이것을 대부분 이해합니다.발송을 위해 썽크를 작성하는 경우 redux에서 "다음"과 "store.dispatch"의 차이점은 무엇입니까?

const thunk = (store) => (next) => (action) => 
    typeof action === 'function' ? 
    action(store.dispatch) : 
    next(action); 

왜 하나 store.dispatchnext 그 반대로 사용합니다 :

그러나, 나는 우리가 썽크에 store.dispatch 대신 next을 사용하는 이유에 혼란 스러워요? 나는 next가 다음 미들웨어로 나아가는 것을 이해하지만, 다음 미들웨어도 결국 디스패치를 ​​호출한다면, 을 next 이상으로 사용해야하는 이유는 무엇입니까?

답변

3

이미 지적했듯이 next은 체인의 다음 미들웨어 만 호출합니다. 결국 원래의 디스패치 함수를 호출하지만 전체 체인을 다시 트래버스하려고 할 때이를 사용하는 것은 적절하지 않습니다. 썽크의 경우 전체 체인을 가로 질러 가고 싶습니다.

따라서 작업을 수행하려는 미들웨어를 만든 다음 체인을 계속 진행하려면 next을 사용하십시오. 예를 들어, 로거는 작업을 기록하고 next을 호출 한 다음 결과 상태를 기록합니다. 전체 체인을 가로 지르는 콜백을 반환하려면 store.dispatch을 반환하십시오. 미들웨어에서 next을 반환하기를 원하지 않을 것 같습니다. 왜냐하면 어떤 미들웨어가 현재의 전후에 있는지 모르기 때문에 미들웨어 체인 외부에서 호출하는 결과는 예측할 수 없기 때문입니다.