说我有一个具有以下形状的全局状态缩减器:
全局减速器:
const globalInitialState = {
userId: 0,
year: 1900
}
然后我有一个基于这些全局参数的数据状态缩减器:
减速器
用户10的2018年数据
const summaryDataInitialState = [{data for user 10, 2018}, {data}, {data}];
要更新“摘要数据”,我有一个异步的redux-thunk操作:
摘要操作:
getSummary = (userId, year) => {
return async dispatch => {
let data = await api.getData(userid, year);
dispatch(success(data));
}
}
但是,当您在全球范围内更改年份时,应该如何触发更新汇总数据?
我应该从“ updateYear”操作中将摘要操作称为“ getSummary”,还是这是错误的模式/设计?我不喜欢这如何将“ summaryActions”与“ globalActions”联系起来。甚至在更远的将来,当这些全局变量更改时,可能需要更改很多“子状态”。另外,我不希望userId的初始设置,年份触发获取应用程序中的所有状态,我想根据需要检索此状态。
答案 0 :(得分:0)
您可以直接分派化简器类型,然后化简器将直接拾取它,而不必直接导入操作。
getSummary = (userId, year) => {
return async dispatch => {
let data = await api.getData(userid, year);
dispatch(success(data));
dispatch({type: 'UPDATE_YEARLY', payload: year})
}
}
或者,当您调度成功时,全局化简器也可以捕获其分发的化简器类型。
简易减速器:
SET_SUCCESS: (state, action) => ({...state, year: action.payload.year, userid: action.payload.userid})
然后在全局reducer中:
SET_SUCCESS: (state, action) => ({...state, year: action.payload.year})
如果他们都观看相同的类型(SET_SUCCESS),那么他们都将使用有效负载来分派该动作。