redux saga des sélecteurs, comment puis-je accéder à l'état d'une saga?
Questions similaires ont été posées, mais les réponses n'ont pas été d'une grande aide pour moi.
Quelles sont les sélecteurs dans redux?
Comment obtenir quelque chose de l'état /stocker à l'intérieur d'un redux-saga de la fonction?
Je pense que j'ai une configuration différente puisque je ne peux pas semblent être en mesure d'accéder à l'état de ma saga.
J'ai essayé de faire:
const getList = store => store;
const getList = state=> state;
ces deux retour undefined
.
Mon magasin ressemble à...
export default function createStoreWithMiddleware() {
const sagaMiddleware = createSagaMiddleware();
const loggerMiddleware = createLogger();
const middleware = [sagaMiddleware, loggerMiddleware];
const persistedState = localStorage.getItem('reduxState') ? JSON.parse(localStorage.getItem('reduxState')) : {};
const store = createStore(reducer, persistedState, compose(
applyMiddleware(...middleware)
));
store.subscribe(() => {
localStorage.setItem('reduxState', JSON.stringify(store.getState()));
});
sagaMiddleware.run(rootSaga);
return store;
}
Et je veux accéder à ma liste de cette saga:
function* selectTender(action) {
try {
const response = yield Api.getTenderById(action.payload);
yield put({type: 'SELECT_TENDER_SUCCEEDED', currentTender: response});
const list = yield select(getList);
yield put({type: 'FETCH_CHAPTERS', chaptersList: list, tenderId: response.id});
} catch (err) {
yield put({type: 'SELECT_TENDER_FAILED', message: err.message});
}
}
export function* watchSelectTender(){
yield takeEvery('SELECT_TENDER', selectTender);
}
Mais comme je l'ai dit, les deux state
et store
ne sont pas définis.
Alors, comment puis-je accéder à mon magasin (ou l'état) dans la saga?
Vous devez vous connecter pour publier un commentaire.
Vous aurez à utiliser des sélecteurs pour que. Je vais donner un exemple simple.
Créer un fichier
selectors.js
et ajoutez les champs que vous souhaitez sélectionner à partir de votre magasin, comme indiqué ci-dessous.Puis dans votre saga, importer les sélecteurs que,
et quand vous avez besoin
username
dans votre saga, vous pouvez simplement faire,la constante
username
danssampleSaga
va maintenant procéder à la valeur de nom d'utilisateur de l'état.yield select(selectors.username);
il a travaillé - comme par magie 🙂