applyMiddleware 소스 폐쇄

  돌아 오는 소스를 다시 읽어 때 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) 파견

 

추천

출처www.cnblogs.com/zhansu/p/11294183.html