[解決済み] React-Redux: コンポーネントの状態はすべてReduxストアに保持されるべきか?
質問
単純なトグルがあるとします。
ボタンをクリックすると、Colorコンポーネントは赤と青の間で変化します。
この結果を得るには、次のようなことをすればよいかもしれません。
index.js
Button: onClick={()=>{dispatch(changeColor())}}
Color: this.props.color ? blue : red
コンテナ.js
connect(mapStateToProps)(indexPage)
アクションクリエータ.js
function changeColor(){
return {type: 'CHANGE_COLOR'}
}
reducer.js
switch(){
case 'CHANGE_COLOR':
return {color: true}
が、jQueryとクラスとCSSで5秒でできることを、これだけのコードで書いているのですから...。
私が本当に聞きたいことは、ここで何が間違っているのか、ということです。
どのように解決するのですか?
Reduxは主にquot;アプリケーションの状態(")を対象としています。その上に構築されたビューは、その状態を反映したものですが、その状態のコンテナをすべて排他的に使用する必要はありません。
単純に以下の質問をします。この状態はアプリケーションの他の部分にとって重要か? アプリケーションの他の部分は、その状態に基づいて異なる動作をするでしょうか。多くのマイナーなケースでは、そのようなことはないでしょう。例えば、ドロップダウンメニューを考えてみましょう。開いているか閉じているかは、おそらくアプリケーションの他の部分には影響を与えません。だから、店舗と連動させるのはやりすぎでしょう。確かに有効なオプションではありますが、何のメリットもありません。それよりも
this.state
を使用して、その日を終える方が良いでしょう。
あなたの特定の例では、ボタンがトグルされる色は、アプリケーションの他の部分で何か違いがあるのでしょうか? アプリケーションの主要部分に対するある種のグローバルなオン/オフ切り替えである場合、それは間違いなくストアに属します。しかし、ボタンをクリックしたときにボタンの色を切り替えるだけであれば、色の状態をローカルに定義したままにしておくことができます。ボタンをクリックする動作は、アクションディスパッチを必要とする他の効果を持つかもしれませんが、それは何色にすべきかという単純な問題とは別のものです。
一般的に、アプリケーションの状態を可能な限り小さく保つようにします。アプリケーションに すべて をそこに押し込む必要はありません。必要なとき、あるいはそこに何かを入れておくことが非常に意味のあることであるとき、それを行ってください。あるいは、Dev Toolsを使用する際に、あなたの生活をより簡単にする場合です。しかし、その重要性を過度に高めてはいけません。
関連
-
[解決済み] setStateを呼び出さずにReactコンポーネントを強制的に再レンダリングすることは可能ですか?
-
[解決済み] Reactコンポーネント外でのクリックを検出する
-
[解決済み] Reduxストアの状態をリセットする方法とは?
-
[解決済み】Reactコンポーネントが再レンダリングされる原因を追跡する
-
[解決済み】React-ReduxとmapStateToProps()を理解する。)
-
[解決済み] react reduxにおけるコンポーネントとコンテナの違いについて
-
[解決済み] モバイルWeb HTML5フレームワークの選び方【終了しました
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] 文字列がhtmlであるかどうかをチェックする
-
[解決済み] JavaScriptとLuaの微妙な違い [終了しました]
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] TypeScriptのdeclare classとinterfaceの違いとは?
-
[解決済み] AngularJS - ngRepeatフィルタリングされた結果の参照を取得する方法
-
[解決済み] JavaScript のオブジェクトの配列を比較し、最小値/最大値を取得する
-
[解決済み] BlobからArrayBufferへ移行する方法
-
[解決済み] AJAX Mailchimp サインアップフォームの統合
-
[解決済み] モデルフェッチ時に1をtrueに、0をfalseに変換する方法
-
[解決済み] 各オブジェクトに?重複
-
[解決済み] Prototypeを使ってtextareaを自動サイズ調整するには?
-
[解決済み] V8 Javascript エンジンのスタンドアロン実行
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ