2017-11-05 15 views
-1

私は最初のreact-reduxアプリケーションをビルドしています。配列の突然変異チェック

iはテストしていアクション項目を選択している: 更新「を選択」ブーリアンプロパティは、アクション

によって渡さ選択によれば、オブジェクトを含む配列である:今

"allItems":[ 
    { 
     "id": 1, 
     "name": "item1", 
     "selected": false 
    }, 
    { 
     "id": 2, 
     "name": "item2", 
     "selected": false 
    }, 
    { 
     "id": 3, 
     "name": "item3", 
     "selected": false 
    }, 
    { 
     "id": 4, 
     "name": "item4", 
     "selected": false 
    } 
] 

リデューサ:

const allItems = (state=[], action) => { 

switch(action.type){ 

    case "SELECT_ITEM" : 

     return state.map((item, index) => { 
      if(item.id === action.payload.id){ 
       return { ...item, selected: true} 
      } 
      else 
      { 
       return {...item, selected: false} 
      } 
     }) 

    default: 
    return state 
    } 

} 

はあなたに感謝

+0

これは 'allItems'スライスのスライス減速器ですか? – bitstrider

+0

はい、最初の行で 'const allItems =(state = []、action)=> {'私は今質問を編集しますと仮定します – Roimil

+0

それはうまくいかないことを記述することができます。例えば、あなたの行動は減量者によって処理された後、あなたが期待した通りに州をどのようにしていませんか? 'ケース "select_itemに": リターンstate.map((アイテム、インデックス)=> { 場合(item.id === action.payload – bitstrider

答えて

0

たとえば、Object.assing({}, item, selected: true)を返すことをお勧めします。これにより、常に新しい状態の新しいオブジェクトが返されます。

+0

は私がそれをしたあなたの提案以下、お返事ありがとうございました。 ID){ リターンObject.assign({}、アイテム、{ が選択:真 }) }他{ リターンObject.assign({}、アイテム、{ が選択:偽 }) }}) ' 今は大丈夫ですか? – Roimil

関連する問題