86 votes

getState dans redux-saga?

J'ai un magasin avec une liste d'éléments. Lorsque mon application se charge tout d'abord, j'ai besoin de désérialiser des objets, de créer des objets en mémoire sur la base des éléments. Les articles sont stockés dans mon redux magasin et géré par un itemsReducer.

Je suis en train d'utiliser redux-saga à la poignée de la désérialisation, comme un effet secondaire. Sur le premier chargement de la page, je l'envoi d'une action:

dispatch( deserializeItems() );

Ma saga est mis en place tout simplement:

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

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

Dans mon désérialiser saga, où je veux gérer les effets secondaires de la création en mémoire les versions de mes articles, j'ai besoin de lire les données existantes à partir du magasin. Je ne suis pas sûr de la façon de le faire ici, ou si c'est un modèle que j'ai même essayer avec redux-saga.

237voto

Kokovin Vladislav Points 5938

vous pouvez utiliser select effet

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

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

aussi, vous pouvez l'utiliser avec les sélecteurs

const getItems = state => state.items;

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

-6voto

Alex Shwarc Points 452

Sélectionnez l'effet de ne pas nous aider si nous dans une des fonctions de rappel, lorsque le flux de code n'est pas géré par Saga. Dans ce cas, il suffit de passer dispatch et getState à la racine de la saga:

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

Et le passage de paramètres à l'enfant sagas

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

Et puis dans la montre méthodes

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X