Ich habe ein Geschäft mit einer Liste von Artikeln. Wenn meine App zum ersten Mal geladen wird, muss ich die Elemente deserialisieren, z. B. beim Erstellen einiger Objekte im Speicher, die auf den Elementen basieren. Die Artikel werden in meinem Redux-Store gespeichert und von einer itemsReducer
verarbeitet.
Ich versuche, redux-saga zu verwenden, um die Deserialisierung als Nebeneffekt zu behandeln. Beim Laden der ersten Seite schicke ich eine Aktion ab:
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 Deserialisierungssage, in der ich mit dem Nebeneffekt der Erstellung von In-Memory-Versionen meiner Elemente umgehen möchte, muss ich die vorhandenen Daten aus dem Geschäft lesen. Ich bin mir nicht sicher, wie ich das hier machen soll, oder ob dies ein Muster ist, das ich sogar mit Redux-Saga versuchen sollte.
sie können EFFEKT AUSWÄHLEN 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' });
}
Select-Effekt hilft uns nicht, wenn wir in einer Rückruffunktion arbeiten, wenn der Code-Fluss nicht von Saga gehandhabt wird. In diesem Fall übergeben Sie einfach dispatch
und getState
an die Root-Saga:
store.runSaga(rootSaga, store.dispatch, store.getState)
Und die Passparameter für Kindersagas
export default function* root(dispatch, getState) {
yield all([
fork(loginFlow, dispatch, getState),
])
}
Und dann in Uhrmethoden
export default function* watchSomething(dispatch, getState)
...