2016-03-26 1 views
4

セッションに関連するすべてのAPI呼び出し(認証、登録、リフレッシュトークンなど)を処理する反応アプリケーションのライブラリを作成しています。このライブラリは、独自のreduxストアにアクセスしてアクションをディスパッチする必要があります。 これは、ユーザーのアクセストークンが期限切れになるたびに、setTimeoutを使用してトークンをリフレッシュするためのAPIを呼び出すアクションクリエータを呼び出し、新しいセッションデータでアプリケーションレキシックスストアを更新する必要があるためです。ライブラリからreduxストアにアクセスするには?

私はそれを初めて呼び出すときにディスパッチメソッドをライブラリに渡すことを考えていましたが、それを行うには最良の方法だとは思いません。

または、initialize()メソッドを作成して、ディスパッチをライブラリに渡すこともできます。

import { authenticate } from 'libraries/session'; 

export function login(email, password) { 
    return (dispatch) => { 
     dispatch(loginRequest()); 

     return authenticate(email, password, dispatch) // dispatch is passed here, so I can use it later in the library 
     .then(() => (
      dispatch(loginSuccess()) 
     )) 
     .catch((json) => (
      dispatch(loginError()); 
     )); 
    }; 
}; 

私はこのコードをまだ試していませんが、それは今のところブレーンストーミングのほうです。

これを処理する最善の方法はありますか?

ありがとうございます!

+0

あなたがミドルウェアとして、これを行うと考えていますか? –

+0

私はこれについて考えましたが、ミドルウェアでどうすればいいのか分かりません。 – alexmngn

答えて

4

私の衝動はのparamsを交換することになります。

import { authenticate } from 'libraries/session'; 


export function configureLogin(store) { 
    var {dispatch, subscribe, getState} = store; 
    return (email, password) => { 
     dispatch(loginRequest()); 

     return authenticate(email, password, dispatch) // <- I don't why dispatch needs to be included, but I'll take ur word for it 
     .then(() => dispatch(loginSuccess()) 
     .catch(json => dispatch(loginError())); 
    }; 
}; 

// usage 
import { configureLogin } from './service/login'; 
var store = createStore(); 
var login = configureLogin(store); 
login(email, password); 
+0

私はついにそのようなことに感謝しました! :) – alexmngn

関連する問題