使用react-redux获取另一个reducer的状态

时间:2016-11-20 12:58:31

标签: javascript reactjs react-redux

我想知道在减速器中是否有可能获得另一个减速器的状态。我正在使用react-redux:

import * as reducers from "./client/components/reducers";
const reducer = combineReducers({
    ...reducers,
    routing : routerReducer,
});

const store = createStore(
  reducer,
  DevTools.instrument()
);

我有两个减速器:钱包和操作。 当我添加/更新操作时,我想计算我的钱包总数并将其保存在我的钱包减速器中。

这是我的钱包减速器:

import { INSERT, UPDATE, DELETE, UPDATE_ALL, SET_TOTAL } from "./wallets.constants";
import { INSERT as INSERT_OPERATION, UPDATE as UPDATE_OPERATION, DELETE as DELETE_OPERATION } from "../operations/operations.constants";

export default (state = initialState, action) => {
  const result = Object.assign({}, state);
  if (action.wallet && !action.wallet.uuid) {
    return state;
  }
  switch(action.type) {
    case INSERT :
    case UPDATE :
    case DELETE :
      result[action.wallet.uuid] = action.wallet;
      return result;
    case INSERT_OPERATION :
    case UPDATE_OPERATION :
    case DELETE_OPERATION :
      // Here I want to calculate total of operations in this wallet
      return result;
    default : return state
  } 
}

我想增加每个Insert的总数,而不是每次都重新计算所有总数,但是如果它是Update,则不可能,因为我需要减少我在这里没有的旧值。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

最好尽量保持状态树尽可能正常化 - 这有助于将其视为关系数据库。如果你这样做,这意味着我认为你在这里的问题是简化的。因此(如果我理解您的要求正确),您可以在状态中保存您的添加/更新/等操作,并在运行中计算总数'而不是把它保持在状态(因为你应该能够从操作集合中得到它?)。

可用于解释存储在状态中的规范化数据的辅助函数在Redux中称为选择器。看看这里:

http://redux.js.org/docs/recipes/ComputingDerivedData.html