【react】state配列を部分的に更新する方法

  • 2020年11月20日
  • React

今回は配列の中のオブジェクトの値を部分的に変える方法についてです。

本当はこれでなくても全然同じ動きができるのですが、react色の濃いコードを

共有したいと思い選択しました。

例えば、以下のような配列があったとします。

const options = [
{id: 1, name:”john”, birthday: ‘19900412’, value: false},
{id: 2, name:”hiro”, birthday: ‘19910906’, value: false},
];

this.state = {
  option: option
}

配列の中にid,name,birthday,valueとありますが、今回はこの中の

birthdayだけを変えて再度setStateをしたい場面を仮定します。

一般的にstateはsetState({hoge: “hoge”})で更新することができますが

これにならってsetState({option: this.state.option[‘birthday’]})で更新しようと

しても値を更新することはできません。

これは、react自身が従来のjavascriptのようなオブジェクトを指定して代入ということができない仕様となっているため

です。代替え手段としてprevStateを使った部分的な更新方法があります。

このprevStateというのは更新される前のstate「option」であり、このprevStateから

map関数で新しいstateを生成する仕組みになっています。

このコードではmapの中のObject.assign()でn番目のbirthdayを適当な値に更新してsetStateを更新しています。

this.setState(prevState => ({
options: prevState.options.map(
obj => (obj.id === 1 ? Object.assign(obj, { birthday: “19920912” }) : obj)
)
}));

render辺りでthis.state.optionの中身を確認してみてください。部分的に変更ができていると

思います。

プロジェクトに慣習がなければreactのオブジェクトにおけるsetStateはこれで良さげ。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG