2016-03-26 5 views
4

Ich erstelle eine Bibliothek für meine React-Anwendung, die alle API-Aufrufe für die Sitzung behandelt (Authentifizierung, Registrierung, Aktualisierungstoken usw.) und diese Bibliothek muss selbst auf den Redux-Speicher zugreifen, um Aktionen zu versenden. Der Grund dafür ist, wann immer das Zugriffstoken des Benutzers abläuft, mit einem setTimeout muss ich einen Aktionsersteller aufrufen, der meine API aufruft, um das Token zu aktualisieren und den Anwendungsreduktionsspeicher mit den neuen Sitzungsdaten zu aktualisieren.Wie kann man von einer Bibliothek auf den Redux-Speicher zugreifen?

Also dachte ich daran, die Dispatch-Methode an die Bibliothek zu übergeben, wenn ich sie zum ersten Mal anrufe, aber ich bin mir nicht sicher, ob das der beste Weg ist.

Oder ich könnte auch eine initialize() Methode erstellen, die den Versand an die Bibliothek übergeben wird.

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()); 
     )); 
    }; 
}; 

Ich habe diesen Code noch nicht ausprobiert, es ist eher ein Brainstorming für jetzt.

Hätten Sie einen Vorschlag, wie Sie damit umgehen sollen?

Danke!

+0

Haben Sie darüber nachgedacht dies als Middleware zu tun? –

+0

Ich dachte darüber nach, aber ich habe keine Ahnung, wie ich es mit Middleware machen könnte, ein Beispiel wäre großartig! – alexmngn

Antwort

4

würde mein Impuls, die params tauschen werden:

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

Ich habe endlich etwas Ähnliches getan, danke! :) – alexmngn

Verwandte Themen