Redux更改多个状态

时间:2019-02-15 19:10:28

标签: reactjs design-patterns redux

说我有一个具有以下形状的全局状态缩减器:

全局减速器:

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的初始设置,年份触发获取应用程序中的所有状态,我想根据需要检索此状态。

1 个答案:

答案 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),那么他们都将使用有效负载来分派该动作。