2017-01-19 6 views
0

私はストレートReduxのドキュメントからこれを撮影した:Reduxミドルウェア、サンクス?

const logger = store => next => action => { 
    console.group(action.type) 
    console.info('dispatching', action) 
    let result = next(action) 
    console.log('next state', store.getState()) 
    console.groupEnd(action.type) 
    return result 
} 

は今、私は約束を使用する方法を知っているが、サンクは...私は少し迷ってしまいました。

なぜ彼らは次のことをしますか:store => next => action =>? Reduxのドキュメントで

答えて

4

についてmiddleware、あなたはES6矢印関数チェーンことがわかります。ES5に翻訳されたとき

logger = store => next => action => 

は次のようになります。

function logger(store) { // this is not the store, just an object with getState and dispatch 
    return function wrapDispatchToAddLogging(next) { 
    return function dispatchAndLog(action) { 
     console.log('dispatching', action) 
     let result = next(action) 
     console.log('next state', store.getState()) 
     return result 
    } 
    } 
} 

なぜ機能が必要なのか

これは部分アプリケーションと呼ばれ、これについては、 articleです。

基本的な考え方は、関数に対して3つの引数を指定する必要がありますが、現在は1つしかなく、後で1つしかなく、3番目の引数が近い将来にある場合、利用可能なときはいつでも注文してください。引数を適用するたびに、新しい関数が得られます。この関数には、その文脈にパラメータが格納されています。

注:これは第一に渡される実際の「店舗」であるmiddleware's chainの作成にはいくつかのステップがありますので、Reduxの

ミドルウェアで

は、部分的なアプリケーションを必要とします引数:

const middlewareAPI = { 
    getState: store.getState, 
    dispatch: (action) => dispatch(action) 
} 
  1. は、ミドルウェアのアレイを構成

    鎖= middlewares.map(ミドルウェア=>ミドルウェア(middlewareAPI)):ミドルウェアのアレイを繰り返し、各関数を呼び出して、各機能(store => PARAM)にmiddlewareAPIを供給する。

    ディスパッチ=(...鎖)(store.dispatch)

  2. を構成し、composeで一つ前にnext =>パラメータとして各ミドルウェアを通過し、最後にdispatchを渡す:

    リターンfuncs.reduce((A、B)=>(... argsを)=>(B(... argsを)))

  3. 今ミドルウェアのみとシンプルな機能です1つのパラメータaction =>、アクションがミドルウェアチェーンを移動するたびに、各ミドルウェアのaction =>機能が現在のアクションで呼び出されます。

+0

パーフェクト!あなたは多くのことをクリアしました! –

+0

あなたは大歓迎です:) –

関連する問題