돌아 오는 소스를 다시 읽어 때 applyMiddleware 매우 영리의 사용에서 찾을 수 있기 때문에 클로저는 다져진 땅, 그들이 언급이 시간입니다. 우리는 간단한 예를 살펴.
VAR의 A = (NUM) => NUM + 1 VAR의 B = { 상품명 : (NUM) => A (NUM) } = (NUM) => NUM + 5 CONSOLE.LOG (b.name ( 3))
결과는 4 또는 8 인쇄하기입니까?
B는 타깃 속성 이름을 갖는다. 이름은 함수를 사용하여 함수 본체 글로벌 범위가 다음에, 수정 된 가변하는 방법이다. 답은 8 개입니다. 우리는 범위의 변수의 값에 용해되지 않고, 상기 범위의 대응하는 실행 콘텍스트의 변수의 값과 동일한 범위의 값이 상이 취할 동일한 변수 일 수있다. 우리는이 기사 시리즈를 볼 수 있습니다.
다음으로, 우리의 applyMiddleware 소스 봐.
내보내기 기본 기능 applyMiddleware (... 미들웨어) { 창 (createStore) => (감속기, preloadedState, 인핸서) =는> { CONST 저장소 = createStore (감속기, preloadedState, 인핸서) 디스패치하자 = store.dispatch 체인하자 = [] CONST middlewareAPI = { 의 getState : store.getState, 디스패치 (액션) => 디스패치 (액션) } 체인 = middlewares.map (미들웨어 => 미들웨어 (middlewareAPI)) 디스패치 = 구도 (... 체인) (store.dispatch) 반환 { ... 저장, 파견 } } }
더 중요한 장소에있어서, 상기 내부, 외부 디스패치 호출 객체가 디스패치 방법을 가지며, 그 목적은, 가변 middlewareAPI이다. 다음에, 상기 방법 맵 배열 객체는 인수로서 건네.
우리는 썽크 소스 미들웨어를 봐
수출 기본 기능 thunkMiddleware ({파견,의 getState은}) { 반환 다음 => 행동 => 과 typeof 행동 === '기능을'? 액션 (파견의 getState) : 다음 (행동); }
작업이 실제로이 디스패치의 디스패치 작성 = (... 체인) (store.dispatch)의 디스패치 강화 된 디스패치의 시간을 사용하여 전달 시점을 결정하는 기능을 할 때까지 middlewareAPI 디스패치 넘어가.
(요약 미들웨어 파라미터는 다음 원래 store.dispatch을 받아 thunkMiddleware는 ({디스패치는의 getState}) 또는 디스패치 향상된 후에 디스패치에서 미들웨어 (middlewareAPI) = (... 체인) 작성 의 store.dispatch) 파견