javascript - rootsaga - redux saga tutorial
getState en la saga redux? (2)
El efecto de selección no nos ayuda si tenemos funciones de devolución de llamada, cuando Saga no maneja el flujo de código.
En este caso, simplemente pase
dispatch
y
getState
a la saga raíz:
store.runSaga(rootSaga, store.dispatch, store.getState)
Y los parámetros de paso a las sagas infantiles
export default function* root(dispatch, getState) { yield all([ fork(loginFlow, dispatch, getState), ]) }
Y luego en los métodos de vigilancia
export default function* watchSomething(dispatch, getState) ...
Tengo una tienda con una lista de artículos.
Cuando mi aplicación se carga por primera vez, necesito deserializar los elementos, como crear algunos objetos en memoria basados en los elementos.
Los artículos se almacenan en mi tienda redux y son manejados por
itemsReducer
.
Estoy tratando de usar redux-saga para manejar la deserialización, como efecto secundario. En la primera carga de la página, despacho una acción:
dispatch( deserializeItems() );
Mi saga está configurada simplemente:
function* deserialize( action ) {
// How to getState here??
yield put({ type: ''DESERISLIZE_COMPLETE'' });
}
function* mySaga() {
yield* takeEvery( ''DESERIALIZE'', deserialize );
}
En mi saga deserialize, donde quiero manejar el efecto secundario de crear versiones en memoria de mis artículos, necesito leer los datos existentes de la tienda. No estoy seguro de cómo hacer eso aquí, o si ese es un patrón, incluso debería intentarlo con redux-saga.
puedes usar el efecto select
import {select, ...} from ''redux-saga/effects''
function* deserialize( action ) {
const state = yield select();
....
yield put({ type: ''DESERIALIZE_COMPLETE'' });
}
también puedes usarlo con selectores
const getItems = state => state.items;
function* deserialize( action ) {
const items = yield select(getItems);
....
yield put({ type: ''DESERIALIZE_COMPLETE'' });
}