2017-09-06 8 views
0

私の質問は再来のapplyMiddlewareの実装

export default function applyMiddleware(...middlewares) { 
    return (createStore) => (reducer, preloadedState, enhancer) => { 
    const store = createStore(reducer, preloadedState, enhancer) 
    let dispatch = store.dispatch 
    let chain = [] 

    const middlewareAPI = { 
     getState: store.getState, 
     dispatch: (...args) => dispatch(...args) // why not just use `dispatch: dispatch` 
    } 
    chain = middlewares.map(middleware => middleware(middlewareAPI)) 
    dispatch = compose(...chain)(store.dispatch) 

    return { 
     ...store, 
     dispatch 
    } 
    } 
} 

誰もが私に違いを見分けることができますか?ありがとう。

+0

最初のコードを実行してエラーが発生しましたか? –

+0

ミドルウェアで 'dispatch'を使うと' dispatch'はミドルウェアチェーンで 'dispatch'の代わりに元の' store.dispatch'を指しています。そのため、クロージャを使用して変数ディスパッチをポイントします。 –

答えて

0

これは、JS変数スコープ/ホスティングのやや複雑な組み合わせで、渡されたディスパッチメソッドが実際にミドルウェアチェーンの開始点を指すようにする必要があります。

詳細については、新しく追加された(まだ公開されていない)Redux FAQ entry on why applyMiddleware uses a closureをご覧ください。

関連する問題