2016-11-18 10 views
1

多分これまでに答えられているかもしれませんが、私は答えを見つけるのが難しいです。別のリデューサーからのアクセス状態React/Redux

私は自分の初期状態で減速機を持っていなければなりません。 1つの減速機から初期状態にアクセスする方法はありますか?

リデューサーワン:

const initialState = Immutable.fromJS({ loadData: [] }) 

const reducerOne = (state = initialState, action) => { 
    switch (action.type) { 
    case SELECT_REPORT_FORMAT: { 
     return state.merge({ loadData: state.get('loadData') }); 
    } 
    .... 
} 

リデューサー2:

const initialState = Immutable.fromJS({ newData: [] }); 
const reducerTwo = (state = initialState, action) => { 
    switch (action.type) { 
    case GET_NEW_DATA: { 
     // Is there a way to "call" the SELECT_REPORT_FORMAT in 
     // reducerOne and get its new state (state.get('loadData')) from here? 
     // I did add case SELECT_REPORT_FORMAT in this reducer, and 
     // it did get called, but the state is with the property of 
     // newData, which makes sense. I need to access the loadData 
     // array from here. 
     return state.merge({ newData: state.get('loadData') }); 
    } 
    .... 
} 

ありがとう!

答えて

0

輸出に際しては、initialStateの輸出には害はなく、必要に応じて輸入しています。

export const initialState = yourStuffを追加し、他のレデューサーからインポートしてください。

+0

レスポンスありがとうございますが、私は減速機1で "SELECT_REPORT_FORMAT"から呼び出された後の初期状態の最終結果を取得する必要があります。 – FNMT8L9IN82

+0

私は減算器2の中でstate.merge({loadData:state.get( 'loadData')})の戻り値が必要であることを意味します。 – FNMT8L9IN82

+0

最初の状態ではないので、いくつかのアクションが実行された後に状態を言うことを意味していました。その場合、いいえ、カプセル化を中断し、無限ループを引き起こす可能性があるので、他の還元剤の状態には至らないでください。減速機が減速機によって引き起こされる状態の変化に対応して使用する動作を、コンポーネントが発動させないようにしましょう。 – ZekeDroid

0

まず、

return state.merge({ loadData: state.get('loadData') }); 

は本当に意味がありません。しかし、いずれにしてもinitialStateに同じ値を使用することをお勧めします。これは、あなたが現在持っている方法がうまくいくことを意味しています - 両方の減速機でloadDataとnewDataは空の配列になります。

その後、type: GET_DATApayload: {data: 'blahBlah'}という名前のactionCreatorが呼び出されたときは、両方のレデューサーからこのアクションを取得するだけです。

const initialState = Immutable.fromJS({ loadData: [] }) 
const reducerOne = (state = initialState, action) => { 
    switch (action.type) { 
    case GET_DATA: { 
     return state.merge(fromJS({ loadData: action.payload.data) })); 
    } 
    .... 
} 

action.payload.dataは、あなたの質問に取得しようとしている loadDataある
const initialState = Immutable.fromJS({ newData: [] }); 
const reducerTwo = (state = initialState, action) => { 
    switch (action.type) { 
    case GET_DATA: { 
     return state.merge(fromJS({ newData: action.payload.data) })); 
    } 
    .... 
} 

。期待しています:)

関連する問題