2016-11-20 60 views
0

我想知道是否有可能在减速机中获得另一个reducer的状态。我正在使用react-redux:获取其他reducer的状态与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 
    } 
} 

我之后要增加我总对每个插入的不是重新计算所有的总每一次,但如果它是一个更新是不可能的,因为我需要递减老我在这里没有的价值。

谢谢你帮

回答

0

这是最好的尝试,并保持你的状态树归地 - 它有助于去想它几乎是一个关系型数据库。如果你这样做,这意味着我认为你在这里的问题被简化了。所以(如果我理解你的需求是正确的),你可以在你的状态下保存你的add/update/etc操作并计算总量,而不是保持它的状态(因为你应该能够从操作?)。

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

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