Redux改变状态'在使用组合减速器时用于其他减速器

时间:2018-03-10 00:06:25

标签: reactjs redux

我使用的是redux和redux-saga。我有几个减速器,如:

userReduceritemReducer等。每个人都为封装的相关数据服务于特定目的。

我遇到的情况是,每次发出API请求都会返回一个令牌。此令牌需要在userReducer的状态下更新。

以下是一个例子:

// Action
export function getItems () {
  return {
    type: 'GET_ITEMS'
  }
}


//Saga
const getItems = function * getItems (action) {
   const response = yield call(api.getItems)
   yield put({ type: 'GET_ITEMS_SUCCESS' })
}


//itemReducer
switch(action.type) {
  ...
  case 'GET_ITEMS_SUCCESS':
    return {
        ...state,
        action.data
    }
  ...
}

这只是一个基本的例子,现在在这种情况下,我获得项目并在成功时更新状态,非常直接。我还想做的是使用userReducer中可用的令牌更新action.token状态。

显而易见的方法是会出现重复的情况,这实际上并不合理。

第二个选项在我的userReducer中,我可以在切换之前进行检查,如果操作包含一个令牌,如果有,则更新它的状态(好像,我猜)。

我能想到的最后一个选择是以某种方式修改我的传奇,以便我可以发布新动作' UPDATE_TOKEN'或者类似的,当每个传奇都在运行时。

有人会就如何处理此问题的最佳做法提出任何建议吗?

编辑:

好的,所以我现在看到的最好方法就是在saga中添加另一个产量,例如:

yield put({ type: 'UPDATE_TOKEN', token: response.token }),只需在我的userReducer中使用UPDATE_TOKEN即可。这似乎很简单,只需要在我想要实际执行此操作的任何地方添加它。

0 个答案:

没有答案