我使用的是redux和redux-saga。我有几个减速器,如:
userReducer
,itemReducer
等。每个人都为封装的相关数据服务于特定目的。
我遇到的情况是,每次发出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
即可。这似乎很简单,只需要在我想要实际执行此操作的任何地方添加它。