Ich habe ein Geschäft mit einer Liste von Artikeln. Wenn meine App zum ersten Mal geladen wird, muss ich die Elemente deserialisieren, wie beim Erstellen einiger speicherinterner Objekte basierend auf den Elementen. Die Artikel werden in meinem Redux-Shop gespeichert und von einem itemsReducer
.
Ich versuche, Redux-Saga als Nebeneffekt zu verwenden , um die Deserialisierung zu behandeln. Beim Laden der ersten Seite sende ich eine Aktion aus:
dispatch( deserializeItems() );
Meine Saga ist einfach aufgebaut:
function* deserialize( action ) {
// How to getState here??
yield put({ type: 'DESERISLIZE_COMPLETE' });
}
function* mySaga() {
yield* takeEvery( 'DESERIALIZE', deserialize );
}
In meiner Deserialisierungssaga, in der ich den Nebeneffekt der Erstellung von In-Memory-Versionen meiner Artikel behandeln möchte, muss ich die vorhandenen Daten aus dem Speicher lesen. Ich bin mir nicht sicher, wie ich das hier machen soll, oder wenn das ein Muster ist, sollte ich es sogar mit Redux-Saga versuchen.
quelle
Antworten:
Sie können den Auswahleffekt verwenden
import {select, ...} from 'redux-saga/effects' function* deserialize( action ) { const state = yield select(); .... yield put({ type: 'DESERIALIZE_COMPLETE' }); }
Sie können es auch mit Selektoren verwenden
const getItems = state => state.items; function* deserialize( action ) { const items = yield select(getItems); .... yield put({ type: 'DESERIALIZE_COMPLETE' }); }
quelle
Der Auswahleffekt hilft uns nicht, wenn wir in einem Rückruf funktionieren, wenn der Codefluss nicht von Saga verarbeitet wird. In diesem Fall einfach weitergeben
dispatch
undgetState
die Saga verwurzeln:Und die Übergabeparameter an Kindersagen
export default function* root(dispatch, getState) { yield all([ fork(loginFlow, dispatch, getState), ]) }
Und dann in Uhrenmethoden
export default function* watchSomething(dispatch, getState) ...
quelle
yield select()
ist nur im Saga-Kontext anwendbar. Nur. Saga kann einige Funktionen beinhalten, andere Bibliotheken mit Benutzerinteraktionen über Rückrufe. Zu diesem Zeitpunkt, als der Rückruf ausgelöst wurde, ist die Saga möglicherweise überhaupt nicht mehr vorhanden. Dies ist eine Möglichkeit, Store zu verwenden, wenn Saga nicht verfügbar ist. (Zum Beispiel Frontend-Microservices, Web-Komponenten-Ansatz mit mehreren Filialen, Saga, Reagieren usw.)