2016-04-12 11 views
2

私のレデューサーは、操作対象のスライスとは独立して、状態のルートオブジェクトにデータを取り込みたいと思います。reduxで正規化されたデータを格納する

私はnormalizrがいかに素晴らしい説明に多くのページを発見したが、どこで、どのようにこの正規化されたデータを保存するために、誰も説明されていません。

質問は以下のとおりです。

  1. 私は珍しいと間違って何かをしようとしていますか?

  2. レデューサーは、データのみのスライスに動作するので、どのように私は、ルート状態オブジェクトの状態を変更することができます。

ので、動画低減:(ビデオが他のエンティティが含まれている場合や他のキーも同様)

const videos = (state, action) => { 
    switch (action.type) { 
    case 'LOAD_VIDEOS': { 
     return .... 
    } 
    } 
} 

は、正規化されたデータでもstate.database.videosだけでなく、state.videos(動画IDの配列を有する)を投入すべきです。

答えて

2

還元剤が複数の状態を処理する必要がある場合は、状態全体を与えます。

あなたがcombineReducers()を使用している場合は、減速を組み合わせることの利点を保つので、あなたはそれをラップすることができますし、あなたはまだ完全な状態で動作減速を持つことができます。

function somePartOfState(state, action) { 
    // ... 
} 
function otherPartOfState(state, action) { 
    // ... 
} 
function fullState(state, action) { 
    // ... 
} 

const combined = combineReducers({ 
    somePartOfState, 
    otherPartOfState 
}); 

export function rootReducer(state, action) { 
    // call the combined reducers, 
    // then pass the resulting state to the fullState reducer 
    return fullState(combined(state, action), action); 
} 
+0

ニースの答えを。実際、私は特別な要件はありません。単純なアプリケーションなので、なぜこのアプローチがブログ、ドキュメント、チュートリアルに広告されていないのか不思議でした。 – agori

+0

ありがとうございます。実際、[公式文書](http://redux.js.org/docs/basics/Reducers.html)は、結合されたレデューサーに移動する前にプレーン関数で始まり、combineReducers()は単なるヘルパーにすぎないことを説明しています: "すべてのcombineReducers ()は、キーに従って選択された状態のスライスであなたのレデューサーを呼び出し、それらの結果を再び単一のオブジェクトに結合する関数を生成します。これは魔法ではありません。 –

関連する問題