web-dev-qa-db-fra.com

Comment obtenir quelque chose de l'état / magasin dans une fonction redux-saga?

Comment accéder à l'état redux dans une fonction de saga?

Réponse courte:

import { select } from 'redux-saga';
...
let data = yield select(stateSelectorFunction);
88
Adam Tal

Comme @markerikson l'a déjà indiqué, redux-saga expose une API très utile select() pour appeler un selector sur l'état afin d'en obtenir une partie disponible dans la saga.

Pour votre exemple, une implémentation simple pourrait être:

/*
 * 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});
  }
}

Outre le suggéré doc de @markerikson, il existe un très bon tutoriel vidéo de D. Abramov qui explique comment utiliser selectors avec Redux. Vérifiez également this fil intéressant sur Twitter.

163
NickGnd

C'est à cela que servent les "sélecteurs". Vous leur transmettez l’arbre d’état entier et ils renvoient une partie de l’état. Le code qui appelle le sélecteur n'a pas besoin de savoir dans l'état des données, mais simplement le fait qu'elles aient été renvoyées. Voir http://redux.js.org/docs/recipes/ComputingDerivedData.html pour quelques exemples.

Dans une saga, le select() API peut être utilisé pour exécuter un sélecteur.

26
markerikson