2017-05-31 18 views
0

私の店は次です: 反応系と還元系を持つ還元剤のサブ状態を読み取るにはいくつかの方法がありますか?

const initialState = { 
    all: { 
     "name": "", 
     "datas": { 
      "data1": { 
       "subdata1": [], 
       "subdata2": [], 
      }, 
      "data2": { 
       "subdata1": [], 
       "subdata2": [], 
      }, 
     } 
    } 
} 

は、私は次のコンポーネントがあります。

* All: main Component, map to Data with all.datas 
* Data: show data1 or data2 or data3. map to Subdata with data1 and data2 ... 
* Subdata: show list subdata1 

私はReduxのサブデータに接続を持っている、と私はしたいが、その代わりにリターン一般的な状態、復帰の減速、サブデータの状態例えば

Subdata.js:

class Subdata extends React.Component { 
    // .... 
} 

function mapStateToProps(state, ownProps) { 
    return { 
     subdata: ownProps.subdata 
    }; 
} 

function mapDispatchToProps(dispatch) { 
    return { actions: bindActionCreators(Actions, dispatch) } 
} 

export default connect(mapStateToProps, mapDispatchToProps)(Subdata); 

reducers.js:

const subdata = (state = {}, action) => { 
    // I want that state return: subdata, in this case, [] 
    // instead of all: {...} 
    const copy = JSON.parse(JSON.stringify(state)); 

    switch(action.type) { 
     case "ADD_SUBDATA": 
      // In this moment: I need pass a lot of vars: data_id and subdata_id 
      my_subdata = state.datas[data_id][subdata_id] 
      // I want get directly the subdata 
      my_subdata = state.subdata 
     default: 
      return state; 
    } 
} 

これは可能ですか?どうやって?

ありがとうございました。

答えて

0

はい、可能です。

レデューサーでdot-prop-immutableまたはImmutable.jsを使用して、店舗の「スライス」を選択的に操作することができます。

擬似コードを使用dotProp例:

// Getter 
dotProp.get({foo: {bar: 'unicorn'}}, 'foo.bar') 

署名:私はあなたのコードに気づく

get(object, path) --> value 

次の "クローン" を使用しているあなたの状態:

const copy = JSON.parse(JSON.stringify(state)); 

これは最適ではありません。すべての状態オブジェクトを完全にクローンしているからです。あなたの一部には(減速機が動作する場所、特にあなたが減速機を組み合わせて作業している場合)。

関連する問題