2017-01-31 11 views
2

は、状態オブジェクトを所与:Immutabilityヘルパーを使用して配列内のネストされたオブジェクトを更新する方法は?減速内部

var state = { 
     "data": [{ 
      "subset": [{ 
       "id": 1 
      }, { 
       "id": 2 
      }] 
     }, { 
      "subset": [{ 
       "id": 10 
      }, { 
       "id": 11 
      }, { 
       "id": 12 
      }] 
     }] 
    } 

あなたが見ることができるように、データは、その要素の各々においてアレイと、ネストされた配列です。

action.indexToUpdateがデータのインデックスになることがわかっているので、データ[action.indexToUpdate] .subsetをプログラムで新しい配列に更新したいと考えています。例えば、action.indexToUpdate = 0の場合、そのデータは[0]そうするためには

[{"id":4},{"id":5}] 

[{"id":1},{"id":2}] 

から更新されます、私が持っている:

let newSubset = [{"id":4},{"id":5}] 
let newState = update(state.data[action.indexToUpdate], { 
       subset: { 
        newSubset, 
       }, 
      }) 

しかし、私がこれを実行すると、エラーを返します:

TypeError: value is undefined 

を更新する。

私はここで反応ducomentationを見てきました:https://facebook.github.io/react/docs/update.htmlしかし、私は実際にそれを行う方法を見つけることができませんでした。お知らせ下さい!

答えて

4

あなたのアップデートがサブセット内の他のフィールドがありますが、あなただけの他のキーを含む、特定されたインデックスのフィールドは、あなたが書くでしょう変更したい場合は

var obj = {"state" : { 
    "data": [{ 
     "subset": [{ 
      "id": 1 
     }, { 
      "id": 2 
     }] 
    }, { 
     "subset": [{ 
      "id": 10 
     }, { 
      "id": 11 
     }, { 
      "id": 12 
     }] 
    }] 
}} 
return update(obj, { 
    "state" : { 
     "data": { 
      [action.indexToUpdate]: { 
      "subset": { 
       $set: [newSubset] 
      } 
      } 
     } 
    } 
}) 

のようになります。

return update(obj, { 
    "state" : { 
     "data": { 
      [action.indexToUpdate]: { 
      "subset": { 
       [id]: {$merge: newSubset} 
      } 
      } 
     } 
    } 
}) 
+0

私はあなたの助けに感謝します!申し訳ありませんが、あまりにも多くの問題を単純化しすぎました。私は質問を更新しました - 一度見てください! – jamesdeath123

+0

更新された回答を確認する –

関連する問題