2016-11-20 11 views
0

還元剤で他の還元剤の状態を知ることができるかどうか知りたいです。私はreact-reduxを使用しています:還元還元剤で他の還元剤の状態を取得する

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

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

私は2つのレデューサー:財布と操作を持っています。 操作を追加/更新するときに、ウォレットの合計を計算し、ウォレットレデューサーに保存したいとします。ここで

私の財布の減速です:

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

を助けてくれてありがとう - それはほとんどのリレーショナルデータベースとしてそれについて考えるのに役立ちます。あなたがこれを行うなら、あなたがここにいると思う問題は単純化されます。だから私はあなたの要件を正しく理解している場合は、あなたの状態で追加/更新/ etcの操作を保存し、状態で保持するのではなく、その場で合計を計算することができます(あなたがコレクションからそれを引き出すことができるはずですオペレーション?)。

状態に格納されている正規化されたデータを解釈するために使用できるヘルパー関数は、セレクタとReduxで呼ばれます。ここをクリックしてください:

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

関連する問題