2017-11-07 13 views
0

ich in einer ungewöhnlichen Situation am: Auf Seite zu laden, lassen Sie uns sagen, mein Redux Geschäft mit einem Grundwert mit Feuchtigkeit versorgt wird:einen Redux Speicherwert von einem Druckminderer ohne Kontrolle über den Schöpfer Aktion Zugriff

{ foo: true } 

In einem Druckminderer, ich bin mit react-router-redux (oder jeder anderen Bibliothek, die Aktionen selbst auslöst, nur auf einen Aktionstyp mit Zugang) meinen Zustand auf Aktionen vom Typ LOCATION_CHANGE zu aktualisieren:

... 
case LOCATION_CHANGE: { 
    const deserialized = deserialize(action.payload.query, **foo**); 
    return { ...state, deserialized }; 
} 
... 

Meine deserialize Funktion ne ed den Wert von foo, um meinen Zustand entsprechend zu aktualisieren. Normalerweise würde ich meiner Aktionsnutzlast getState().foo hinzufügen, aber da dies eine Drittanbieterbibliothek ist, kontrolliere ich die Aktionsnutzlast nicht. Gibt es eine einfache Problemumgehung für dieses Problem, das es mir nicht erfordert, die Fremd-Bibliothek auszulöschen?

Antwort

1

Ich nahm markerikson der answer, aber hier ist die Middleware ich mit dem Schreiben endete:

const locationChangeMiddleware = store => next => action => { 
    if (action.type === LOCATION_CHANGE) { 
    const { foo } = store.getState(); 
    return next({ 
     ...action, 
     payload: { 
     ...action.payload, 
     foo, 
     }, 
    }); 
    } 

    return next(action); 
}; 

Nun meine Minderer wie folgt aussieht:

... 
case LOCATION_CHANGE: { 
    const deserialized = deserialize(action.payload.query, action.payload.foo); 
    return { ...state, deserialized }; 
} 
... 
Verwandte Themen