我正试图围绕 redux 和 sagas 进行思考,我认为我设置了一些错误,我希望有人可以提供一些见解。
我已经用我的初始状态创建了我的商店,并且我发送了一个动作,如下所示:
const initialState = fromJS({
product: {},
basket: {},
global: {}
});
const reducers = combineReducers({ product, basket, global });
const sagaMiddleware = createSagaMiddleware();
const store = createStore(reducers,
initialState,
applyMiddleware(sagaMiddleware))
initSagas(sagaMiddleware);
store.dispatch(retrieveSiteKeyValues())
return store;
};
Combine Reducers 来自 redux-immutable。
我的传奇功能:
export function* fetchSiteKeyValuesSaga() {
yield take(RETRIEVE_SITE_KEY_VALUES)
const siteKeyValues = yield call(retrieveSiteKeyValues)
yield put(storeSiteKeyValues(siteKeyValues));
}
我的减速器功能:
const storeSiteKeyValues = (state, payload) => {
payload.anotherObject = {};
payload.anotherMap = new Map();
const newState = fromJS({ payload })
return newState
// OR return state.merge({ global: { siteKey: action.siteKey } }); ?
}
当我询问状态对象时,size
它为零。由于我的初始状态,我预计大小至少为 3。当它newState
被“创建”时,大小为 4。但是当它回到状态切换语句时,状态大小再次为零:
export default (state, action) => {
switch (action.type) {
case STORE_SITE_KEY_VALUES : {
return storeSiteKeyValues (state, action.payload);
}
default:
return state;
}
}
我 90% 肯定只是像我在 reducer 函数中所做的那样转储状态是错误的,我应该使用set()
或者setIn()
我认为update()
更有意义,但是当我使用这些方法时,如果我尝试,状态总是为空或“未定义”.get(x)
在控制台中制定。
当我在浏览器中检查状态时,它看起来像这样:
storeState:{
[2],
[2]
[2]
}
展开的数组如下所示:
0:"product"
1:{anotherObject :{}, anotherMap: map()
size:1
我希望作为有效负载一部分的值在这里,而不仅仅是新的object
和map
.
我是否在商店创建时错误地初始化了我的状态?我是否以错误的方式处理 redux 和状态管理?