[解決済み] Reactコンポーネントのstateにオブジェクトを格納する?
質問
Reactコンポーネントのstateにオブジェクトを格納することは可能でしょうか?もし可能なら、そのオブジェクトのキーの値を変更するには
setState
? のような書き方は構文的に許されないと思うのですが。
this.setState({ abc.xyz: 'new value' });
似たような路線で、もう一つ質問があります。Reactコンポーネントで変数のセットを持ち、それらを状態に格納するのではなく、コンポーネントの任意のメソッドで使用できるようにすることは問題ないでしょうか?
これらのすべての変数を保持する単純なオブジェクトを作成し、コンポーネント上の任意のメソッドを宣言する方法と同様に、コンポーネントレベルに配置することができます。
コードに多くのビジネスロジックを含む場合、いくつかのメソッドによって値が変更される多くの変数を使用する必要があり、これらの値に基づいてコンポーネントの状態を変更するような状況に出くわす可能性が非常に高いのです。
そこで、これらすべての変数を状態として保持するのではなく、値が直接UIに反映されるべき変数のみを保持するのです。
このやり方が、ここで書いた最初の質問よりも優れているのであれば、ステートにオブジェクトを保存する必要はないですね。
どのように解決するのですか?
kiranさんの投稿の他に
更新ヘルパー
(以前は
リアクトアドオン
). これは、npmで
npm install immutability-helper
import update from 'immutability-helper';
var abc = update(this.state.abc, {
xyz: {$set: 'foo'}
});
this.setState({abc: abc});
これは、更新された値を持つ新しいオブジェクトを作成し、他のプロパティはそのままです。 これは、配列へのプッシュと同時に他の値を設定するようなことをする必要がある場合に、より便利です。 不変性を提供するため、あらゆる場所でこれを使用する人もいます。
このようにすると、パフォーマンスを補うために
shouldComponentUpdate: function(nextProps, nextState){
return this.state.abc !== nextState.abc;
// and compare any props that might cause an update
}
関連
-
[解決済み] JavaScriptでオブジェクトをディープクローンする最も効率的な方法は何ですか?
-
[解決済み] JavaScriptのオブジェクトが空であることをテストするにはどうすればよいですか?
-
[解決済み] JavaScriptのオブジェクトにキーが存在するかどうかをチェックする?
-
[解決済み] HTML5のlocalStorageにオブジェクトを格納する方法は?
-
[解決済み] setStateを呼び出さずにReactコンポーネントを強制的に再レンダリングすることは可能ですか?
-
[解決済み] Reactのstateとpropsの違いとは?
-
[解決済み】未定義のオブジェクトプロパティを検出する
-
[解決済み】JavaScriptのオブジェクトの長さ
-
[解決済み] Javascriptによるタッチスクリーンデバイスの検出
-
[解決済み] Angularjs - 現在の日付を表示する
最新
-
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のDateからDay名
-
[解決済み] Angularjs - 現在の日付を表示する
-
[解決済み] 文字列が空白であるかどうかをチェックする
-
[解決済み] オブジェクトの配列からReactコンポーネントをレンダリングする
-
[解決済み] javascript includes() 大文字小文字を区別しない
-
[解決済み] jQueryで入力ファイルが空かどうかをチェックする方法
-
[解決済み] $.ajax実行中にローディングイメージを表示する
-
[解決済み] CORS: 認証モードは 'include' です。
-
[解決済み] Chromeのwebkitインスペクタで「Unsafe JavaScript attempt to access frame with URL...」というエラーが継続的に発生する。
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]