使用Immutable.js和状态的Redux-Saga始终为空

时间:2019-01-27 11:13:32

标签: reactjs redux redux-saga immutable.js redux-immutable

我想把我的头围在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为零。由于我的initalState,我希望大小至少为3。当newState被创建时,大小为4。但是当它回到状态切换语句中时,状态大小又为零:

export default (state, action) => {
  switch (action.type) {
    case STORE_SITE_KEY_VALUES : {
      return storeSiteKeyValues (state, action.payload);
    }    
    default:
      return state;
  }
}

我90%的人确定只是像我在化简器函数中所做的那样转储状态是错误的,所以我应该使用set()setIn(),我认为update()会更有意义,但是当我使用这些方法时,如果我尝试在控制台中制定.get(x),则状态始终为空或“未定义”。

当我在浏览器中检查状态时,它看起来像这样:

storeState:{
   [2],
   [2]
   [2]
 }

展开的数组如下所示:

0:"product"
1:{anotherObject :{}, anotherMap: map()
size:1

我希望作为有效载荷一部分的值不仅在这里是新的objectmap

我在创建商店时错误地确定了我的状态吗?我是否以错误的方式进行redux和状态管理?

2 个答案:

答案 0 :(得分:0)

我想确保您没有错过基本内容:sagaMiddleware.run(YOUR_SAGA);通话在哪里?是否隐藏在initSagas内?

答案 1 :(得分:0)

这是两次设置我的初始状态,一次是在初始化商店时,另一次是在读取reducer初始状态时。我在减速器中的状态是一个空对象,就像在减速器“激活”时那样。最后,我意识到我没有从任何地方读取某些“记忆”状态,我只需要一些初始值即可。我进入了reducer并从我的应用程序中删除了不可变的js,因为这很令人困惑。

为所有新手提供的一些经验教训/ redux-saga!不要试图使事情复杂化。了解什么是一成不变的!自己找出是否需要它,在我的情况下,只有一个真理来源和进入国家就足够了。

进一步阅读: Initalising StateImmutable and State considerations