2017-03-06 14 views
0

値が配列であっても、私のレデューサーが自分のネストされたデータをオーバーライドし続けるのはなぜですか?基本的に私がここにビルドしているのは、ページネーションのようなものです。これまでのところ、ここに私のコードがあります:ページネーション・レデューサーにデータを追加する - reactjs

const INITIAL_STATE = { 
    data: [], 
    page: 1 
}; 

export default (state = INITIAL_STATE, action) => { 
    switch(action.type) { 
     case GET_NEWS_SUCCESS: { 
      return { 
       data : { 
        [action.payload.category]: [ action.payload.data ] 
       }, 
       page: action.payload.page }; 
     } 
    } 

    return state; 
} 

下の画像は、基本的には、次の状態のためechelon array0キーがまだ存在すべきであり、データの別のセットを追加します、私の減速の戻りデータです。しかし、2番目の赤い矩形で見ることができるように、前の0のキーを上書きします。

enter image description here

答えて

2

あなたは、これらの行で、既存の配列を上書き:既存のアレイに新しいオブジェクトを追加する必要があり

data : { 
    [action.payload.category]: [ action.payload.data ] 
}, 

case GET_NEWS_SUCCESS: { 
      if (!state.data[action.payload.category]) { 
       state.data[action.payload.category] = []; 
      } 
      return { 
       data : { 
        [action.payload.category]: [ ...state.data[action.payload.category], action.payload.data ] 
       }, 
       page: action.payload.page }; 
     } 
+0

私はすでにこれを試しましたが、「未定義またはnullをオブジェクトに変換できません」というエラーが表示されます。おそらく、この '... state.data [action.payload.category]'の 'action.payload.category'がまだ存在しないので –

+1

です。更新する前にそれが定義されているかどうかを確認しなければなりません。空の配列。更新された回答をご覧ください。可能なすべてのカテゴリ名をすでに知っている場合は、各更新時にチェックするのではなく、空のカテゴリ配列で状態を初期化することができます。 –

+0

私はこれを試してみます、カテゴリーはapiからフェッチされているので知られていません。 –

関連する問題