2017-02-18 5 views
0

私は角度2のアプリケーションでデータを処理するために不変のngrxストアを使用しています。私は、成功したAPI呼び出しからのデータを、不変のストアのidからオブジェクトへのマップに変換する減速器を持っています:sessions: Map<number, ISession>。私は、foreachループを実行action.payloadにネイティブ配列ISession[]から変換するには、withMutationsに呼び出す:ループをポピュレートするゼロインデックスからのヌルデータポイントを持つ変更不能なマップ

case SessionsActions.LOAD_SESSIONS_SUCCESS: 
    return state.withMutations(map => { 
    map.set('loading', false); 

    action.payload.forEach((session: ISession) => { 
     console.log("Setting ",session); 
     map.setIn(['sessions', session.id], session); 
    }); 
    }) as ISessions; 

私は4つの項目の予想されるコンソール出力、取得:

Setting Object {id: 6, payslip: null, invlice: null, paidByClient: false, completed: false…} 
Setting Object {id: 8, payslip: null, invlice: 1, paidByClient: true, completed: false…} 
Setting Object {id: 9, payslip: 1, invlice: 1, paidByClient: true, completed: false…} 
Setting Object {id: 7, payslip: null, invlice: null, paidByClient: false, completed: false…} 

をしかし店は満たされています

enter image description here

:10の項目では、(9)データそのものが格納されている場合、最大までヌルで0からIDを移入です

この現象が起こっている理由は何ですか?

答えて

0

私は手動でマップを構築し、setではなくsetInを使用してそれを設定することで、問題を解決:

case SessionsActions.LOAD_SESSIONS_SUCCESS: 
    var state = state.withMutations(map => { 
    map.set('loading', false); 

    var sessions = Map<String, ISession>(); 
    for (var i = 0; i < action.payload.length; i++) 
    { 
     var session = action.payload[i]; 
     sessions = sessions.set(session.id, session); 
    } 
    map.set('sessions', sessions); 
    }) as ISessions; 

私はそれがwithMutations機能を持ついくつかのバグだと仮定します。

関連する問題