之前已有类似问题,但答案对我没有任何帮助。
如何在redux-saga函数中从state / store获取数据?
我认为我的设置不同,因为我似乎无法从我的saga中访问状态。
我尝试做:
const getList = store => store;
const getList = state=> state;
这两者都返回undefined
。
我的商店看起来像这样...
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;
}
我希望在这个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);
}
但正如我所说,state
和store
都未定义。
那么,在saga中如何访问我的存储(或状态)?
yield select(selectors.username);
时,它就像魔术一样奏效 :) - Winterfunction getUserName(params) { const username = yield select(selectors.username); return username; }
- ruandaoselect(...)
前面加上yield
... - Filip Savic