2016-04-09 8 views
4

Was wird als "Redux" -Weg von in die Konfiguration von Action-Ersteller?Ordnungsgemäße Methode zum Übergeben der Konfiguration an Redux-Aktions-Ersteller

Betrachten wir ein Asynchron-Aktion Schöpfer:

export function login(username, password) { 
    return (dispatch, getState) => { 
     const service = Auth.createService(config); // <- that's the one 

     service.login(username, password).then((data) => { 
      const {token} = data; 
      dispatch(success(token)); 
     }).catch((err) => { 
      Logger.log(err); 
     }); 
    }; 
} 

Wie Sie sehen können - AuthService (und alle anderen Dienste) erfordern eine Konfiguration, die normalerweise Dinge wie definiert: baseUrl, headers und vieles mehr.

sie require d im AuthService Nachdem sich über so etwas wie:

import configfrom '../config/globalConfig`; 

suboptimal für Vielzahl von Gründen und hat man sie nicht zulassen, außer Kraft setzen für eine bestimmte Dienstinstanz.

eine Middleware (einige Erweiterung über redux-thunk) Mit Hilfe würde die Möglichkeit bieten, um die Konfiguration zu injizieren, aber:

  1. es höchstwahrscheinlich bereits über getState injiziert, da mir, Konfiguration ist ein Teil von der Anwendungszustand, besonders wenn es editierbar

  2. es würde immer noch nicht überschreibt auf pro-creator Basis ermöglichen

Die Konfiguration von Containerkomponenten direkt an den Aktionsersteller this.props.dispatch(login(username, password, config)); zu übergeben, ist sehr ausführlich.

Antwort

2

Ich denke, das injectMiddleware von Este recht ordentlich ist:

// Like redux-thunk with dependency injection. 
const injectMiddleware = deps => ({ dispatch, getState }) => next => action => 
    next(typeof action === 'function' 
    ? action({ ...deps, dispatch, getState }) 
    : action 
); 

Diese Sie Aktion Schöpfer lässt wie

schreiben
export function login(username, password) { 
    return ({ dispatch, getState, authService }) => { 

und authService injizieren, während die Middleware zu initialisieren.

Verwandte Themen