繁体   English   中英

Redux-Saga 使用 Immutable.js 并且状态始终为空

[英]Redux-Saga using Immutable.js and state is always empty

我正在尝试围绕 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;
};

组合 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。但是当它回到状态 switch 语句时,状态大小再次为零:

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

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

我是否在创建商店时错误地初始化了我的状态? 我是否以错误的方式接近 redux 和状态管理?

我想确保您没有遗漏一个基本部分: sagaMiddleware.run(YOUR_SAGA);在哪里sagaMiddleware.run(YOUR_SAGA); 称呼? 它是否隐藏在initSagas

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

给所有新手反应/redux-saga的一些教训! 不要试图把事情复杂化。 了解什么是不可变的! 如果您需要它,请自行弄清楚,在我的情况下,只有一个事实来源和访问状态就足够了。

进一步阅读: 初始化状态不可变和状态注意事项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM