2016-12-14 4 views
2

私はapplyMiddlewareのソースコードを読んでいますが、いくつかのスニペットでは、このように呼びます。applyMiddleware(...middleware)では、nextパラメータはいつ渡されますか? middlewaresの各middlewareapplyMiddleware()の `next`とは何ですか?

export default function applyMiddleware(...middlewares) { 
    return (next) => 
    (reducer, initialState) => { 
     var store = next(reducer, initialState); 
     var dispatch = store.dispatch; 
     var chain = []; 

     var middlewareAPI = { 
      getState: store.getState, 
      dispatch: (action) => dispatch(action) 
     }; 

     chain = middlewares.map(middleware => middleware(middlewareAPI)); 

     dispatch = compose(...chain, store.dispatch); 
     return { 
      ...store, 
      dispatch 
     }; 
    }; 
} 
+0

あなたは[** 'applyMiddleware' **](http://redux.js.org/docs/api/applyMiddleware.html)docsを読んでいますか? –

答えて

0

は、この一般的な形式を有する:

// condensed, does not do anything, just calls the next middleware 
function middleware({ getState }) => (next) => (action) => next(action) 

or 

// expanded, does not do anything, just calls the next middleware 
function middleware({ getState }) { 
    return function (next) { 
    return function (action) { 
     return next(action) 
    } 
    } 
} 

ミドルウェアは、任意に存在するべき次のミドルウェアを呼び出す関数を返す関数を返す関数です。

質問に答えるには、nextが第2の関数の引数として渡されます。このようにして、ストアエンハンサapplyMiddlewareはチェーン内の次のミドルウェアを呼び出すことができます。ミドルウェアの構文はちょっと混乱します(docsから):

ミドルウェアは実際よりもはるかに複雑に聞こえます。唯一の ミドルウェアを実際に理解する方法は、既存の ミドルウェアがどのように機能しているかを見て、自分で作成しようとすることです。入れ子になっている関数は になりますが、実際には の10本のライナーがあり、入れ子になって合成できるので、 ミドルウェアシステムが強力になります。

関連する問題