web-dev-qa-db-ja.com

Reactのオブジェクトの配列のSetState

わかりましたので、私は正しい解決策を見つけることにとてもイライラしているので、ここに問題を投稿しています。答えを出すことは私を大いに助けてくれるでしょう。

状態ツリーは次のようになります

this.state = {
      itemList : [{
                    _id : 1234,
                   description : 'This the description',
                   amount : 100
                    }, {
                    _id : 1234,
                   description : 'This the description',
                   amount : 100
                    }],
     }

問題は次のとおりです。

  1. _idに従って配列のオブジェクト内の特定のキーを更新することはできません
  2. 前の状態はそのままにしておく必要があります
7
Saikat Dey
this.setState(prevState => ({
    itemList: prevState.itemList.map(
    obj => (obj._id === 1234 ? Object.assign(obj, { description: "New Description" }) : obj)
  )
}));

これは、setStateとprevstateを使用して、データ構造内のオブジェクトの特定の属性を更新する方法です。

17
Omar

このように構築された状態を更新するには、更新する要素のインデックスを見つけ、配列をコピーして、見つかったインデックスを変更する必要があります。

レコードのリストをオブジェクトとして保持し、idをキー、レコードを値として保持すると、より簡単で読みやすくなります。

0
simka