[解決済み] this.setStateは私が期待するように状態をマージしていません。
2022-04-23 14:20:57
質問
次のような状態になっています。
this.setState({ selected: { id: 1, name: 'Foobar' } });
そして、状態を更新する。
this.setState({ selected: { name: 'Barfoo' }});
以降
setState
はマージするものと思っていたのですが、そうではありませんでした。
{ selected: { id: 1, name: 'Barfoo' } };
しかし、その代わりにidを食ってしまい、stateが。
{ selected: { name: 'Barfoo' } };
また、ネストされたステート・オブジェクトの1つのプロパティのみを更新するための解決策は何でしょうか?
どのように解決するのですか?
私が思うに
setState()
は再帰的なマージを行いません。
現在の状態の値を使用することができます
this.state.selected
を呼び出して新しい状態を構築し、その状態で
setState()
を追加しました。
var newSelected = _.extend({}, this.state.selected);
newSelected.name = 'Barfoo';
this.setState({ selected: newSelected });
私は、関数
_.extend()
関数(underscore.js ライブラリ)を使用することで、既存の
selected
の部分を浅いコピーで作成します。
別の解決策としては
setStateRecursively()
これは、新しい状態に対して再帰的なマージを行い、次に
replaceState()
を使用します。
setStateRecursively: function(stateUpdate, callback) {
var newState = mergeStateRecursively(this.state, stateUpdate);
this.replaceState(newState, callback);
}
関連
-
親子コンポーネント通信を解決する3つのVueスロット
-
vueにおけるv-forループオブジェクトのプロパティ
-
[解決済み】Node Version Manager のインストール - nvm コマンドが見つかりません。
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] 期待される代入または関数呼び出し: 未使用式なし ReactJS
-
[解決済み】ERROR エラーです。スイッチのname属性が指定されていないフォームコントロールの値アクセッサがない
-
[解決済み】React this.setStateは関数ではありません。
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] setStateを呼び出さずにReactコンポーネントを強制的に再レンダリングすることは可能ですか?
-
[解決済み] ドロップダウンメニューが内部でクリックされたときに閉じないようにする
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
fetch ネットワークリクエストラッパーの説明例
-
jsを使った簡単な照明スイッチのコード
-
vueが定義するプライベートフィルタと基本的な使い方
-
[解決済み】最大呼び出しスタックサイズ超過エラー
-
[解決済み】Uncaught SyntaxError: JSONの位置0に予期しないトークンuがあります。
-
[解決済み】Node.js Error: Cannot find module express
-
モジュールのビルドに失敗しました。Error: ENOENT: no such file or directory, scandir 'D:\.... \node_modules
-
[解決済み] Reactでネストした状態のプロパティを更新する方法
-
[解決済み] Lodash - .extend() / .assign() と .merge() の違い。
-
[解決済み】React:setStateを使用してstateのstate.item[1]を更新するには?