webentwicklung-frage-antwort-db.com.de

getState in Redux-Saga?

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.

46
Andy Ray

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' });
}
125

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) ...

0
Alex Shwarc