2017-01-16 3 views
2

In meiner React-Anwendung verwende ich die Long-Polling-API. Um Anfragen bei jeder Antwort automatisch zu senden, verwende ich Middleware. Aber bevor ich eine neue Anfrage verschicke, muss ich die empfangenen Daten im Laden speichern. Mehr noch, ich möchte eine weitere Aktion in meiner Middleware veröffentlichen. So sieht meine Struktur wie folgt aus:Status abrufen und aus Middleware versenden

InitLongPoll() -> Sendrequest (Daten) -> ReceiveResponse (Daten) * -> Sendrequest (Daten)

'*' ist meine Middleware. Von dort speichere ich Daten in den Laden mit store.dispatch(responseData) und senden neue Anfrage mit store.dispatch(sendRequest(authData)).

Ist es in Ordnung, diese authData mit store.getState().authReducer zu erhalten? Soweit ich weiß, sollte meine Middleware eine reine Funktion sein und sollte nicht von externen Daten abhängen (speichern). Danke im Voraus.

Antwort

3

Ist es in Ordnung, diese authData mit store.getState(). AuthReducer zu erhalten? Soweit ich weiß, sollte meine Middleware eine reine Funktion sein und sollte nicht von externen Daten abhängen (speichern).

Ja ist es. Middleware ist der Weg, um Nebenwirkungen in die Redux-Schleife einzuführen, und es kann keine reine Funktion sein. Ihre eigene Middleware hat einen Nebeneffekt: den Server abfragen.

A redux Middleware ist die Antithese einer reinen Funktion, die definiert ist als:

  1. Die Funktion wertet immer den gleichen Ergebniswert den gleichen Argumentwert gegeben (s). Der Funktionsergebniswert kann nicht von ausgeblendeten Informationen oder einem Zustand abhängen, der während der Programmausführung oder zwischen verschiedenen Ausführungen des Programms geändert werden kann, noch kann er von externen Eingängen von E/A-Geräten abhängig sein (normalerweise siehe unten).
  2. Die Auswertung des Ergebnisses verursacht keine semantisch beobachtbare Nebenwirkung oder Ausgabe, wie Mutation veränderbarer Objekte oder Ausgabe an E/A-Geräte (normalerweise - siehe unten).

Sie können auch in der redux-thunk Quellcode sehen, dass es verwendet getState:

function createThunkMiddleware(extraArgument) { 
    return ({ dispatch, getState }) => next => action => { 
    if (typeof action === 'function') { 
     return action(dispatch, getState, extraArgument); 
    } 

    return next(action); 
    }; 
} 
Verwandte Themen