[解決済み] Reactでネストした状態のプロパティを更新する方法
2022-03-18 06:21:19
質問
このようにネストしたプロパティを使って、状態を整理しようとしています。
this.state = {
someProperty: {
flag:true
}
}
しかし、このように状態を更新することで
this.setState({ someProperty.flag: false });
はうまくいきません。どうすれば正しく動作するのでしょうか?
解決方法を教えてください。
を実現するために
setState
というのは、setStateはネストされたオブジェクトの更新を扱わないからです。
var someProperty = {...this.state.someProperty}
someProperty.flag = true;
this.setState({someProperty})
ダミーのオブジェクトを作成し、それに対して操作を行い、コンポーネントの状態を更新されたオブジェクトに置き換えるというものです。
さて、spreadオペレータは、オブジェクトのネストされたコピーを1レベルだけ作成します。もし、状態が高度にネストしているような場合は、以下のようになります。
this.state = {
someProperty: {
someOtherProperty: {
anotherProperty: {
flag: true
}
..
}
...
}
...
}
のように、各レベルでspread演算子を使ってsetStateすることができます。
this.setState(prevState => ({
...prevState,
someProperty: {
...prevState.someProperty,
someOtherProperty: {
...prevState.someProperty.someOtherProperty,
anotherProperty: {
...prevState.someProperty.someOtherProperty.anotherProperty,
flag: false
}
}
}
}))
しかし、上記の構文は、状態がよりネスト化されるにつれて、非常に醜くなります。
immutability-helper
パッケージを使用して状態を更新します。
参照
本解答
を使用して状態を更新する方法について説明します。
immutability-helper
.
関連
-
Vue Element-uiは、アイコンを追加するためのツリーコントロールノードを詳細に実装しています。
-
Vueにシンプルなメモ帳機能を実装
-
[解決済み】Node.js Error: Cannot find module express
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] jQueryで要素が非表示になっているかどうかを確認するには?
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] forEachループでasync/awaitを使用する
-
[解決済み】別のウェブページにリダイレクトするにはどうすればいいですか?
-
[解決済み】オブジェクトからプロパティを削除する(JavaScript)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
JSクロスドメインソリューション リアクト構成 リバースプロキシ
-
JavaScriptのクロージャの説明
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】GETできない / Nodejsエラー
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み] Web API エラー - このリクエストはブロックされました; コンテンツは HTTPS で提供されなければなりません
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
[解決済み】JavaScriptでインラインIF文の書き方は?
-
jq は html ページとデータを動的に分割する。