2016-07-15 10 views
23

Ich habe ein Geschäft mit einer Liste von Artikeln. Wenn meine App zum ersten Mal geladen wird, muss ich die Elemente deserialisieren, indem ich einige speicherbasierte Objekte basierend auf den Elementen erstelle. Die Artikel werden in meinem Redux-Shop gespeichert und von einem itemsReducer bearbeitet.getState in redux-saga?

Ich versuche redux-saga zu verwenden, um die Deserialisierung als Nebeneffekt zu behandeln. Auf den ersten Laden der Seite, versende ich eine Aktion:

dispatch(deserializeItems()); 

Meine Saga eingerichtet ist einfach:

function* deserialize(action) { 
    // How to getState here?? 
    yield put({ type: 'DESERISLIZE_COMPLETE' }); 
} 

function* mySaga() { 
    yield* takeEvery('DESERIALIZE', deserialize); 
} 

In meiner deserialize Saga, wo ich die Nebenwirkung zu schaffen, in-Memory-Versionen behandeln möchten von meinen Artikeln muss ich die vorhandenen Daten aus dem Laden lesen. Ich bin mir nicht sicher, wie ich das hier machen soll oder ob das ein Muster ist, das ich mit Redux-Saga versuchen sollte.

Antwort

81

können Sie select effect

import {select, ...} from 'redux-saga/effects' 

function* deserialize(action) { 
    const state = yield select(); 
    .... 
    yield put({ type: 'DESERISLIZE_COMPLETE' }); 
} 

verwenden auch können Sie es mit Selektoren

const getItems = state => state.items; 

function* deserialize(action) { 
    const items = yield select(getItems); 
    .... 
    yield put({ type: 'DESERISLIZE_COMPLETE' }); 
} 
0

Select-Effekt hilft uns nicht, wenn wir in einer Callback-Funktionen, wenn Codefluss nicht behandelt wird von Saga. In diesem Fall nur dispatch und getState root Saga passieren:

store.runSaga(rootSaga, store.dispatch, store.getState) 

Und der Pass Parameter Kind Sagas

export default function* root(dispatch, getState) { yield all([ fork(loginFlow, dispatch, getState), ]) }

Und dann in den Uhren Methoden

export default function* watchSomething(dispatch, getState) ...

Verwandte Themen