javascript - react - ¿Cómo obtener algo del estado/tienda dentro de una función redux-saga?
redux-saga example (2)
¿Cómo accedo al estado redux dentro de una función saga?
Respuesta corta:
import { select } from ''redux-saga'';
...
let data = yield select(stateSelectorFunction);
Como ya dice @markerikson,
redux-saga
expone una
select()
API
select()
muy útil para invocar un
selector
en el estado para obtener parte de ella disponible dentro de la saga.
Para su ejemplo, una implementación simple podría ser:
/*
* Selector. The query depends by the state shape
*/
export const getProject = (state) => state.project
// Saga
export function* saveProjectTask() {
while(true) {
yield take(SAVE_PROJECT);
let project = yield select(getProject); // <-- get the project
yield call(fetch, ''/api/project'', { body: project, method: ''PUT'' });
yield put({type: SAVE_PROJECT_SUCCESS});
}
}
Además del
doc
sugerido por @markerikson, hay un muy buen
video tutorial
de D. Abramov que explica cómo usar los
selectors
con Redux.
Consulta también
this
interesante hilo en Twitter.
Para eso están las funciones de "selector". Se les pasa todo el árbol de estado, y devuelven una parte del estado. El código que llama al selector no necesita saber en qué estado se encontraban los datos, solo que se devolvieron. Consulte doc para ver algunos ejemplos.
Dentro de una saga, la
API
select()
se puede usar para ejecutar un selector.