2016-02-02 13 views
5

私は現在Reduxの水域に潜入しています。私はレデューサーのコンセプトがいかにシンプルであるかを理解して以来、私は本当に興奮しています。Reduxの.getState()は状態オブジェクトのコピーを返すべきではありませんか?

しかし、私がタイトルに書いている質問は、私を奇妙に感じさせるものです。

状態オブジェクトの不変性はこのようなReduxの核心であるため、currentStateのメソッドを返すべきではないので、環境にさらされず、したがってそれを変更することは不可能ですか?

+0

関連:[ReduxのgetStateをアンチパターンで使用していますか?](http://stackoverflow.com/questions/34455996/is-using-getstate-in-redux-an-anti-pattern) – raina77ow

+0

@ raina77ow I 2つの質問が非常に関連しているとは思わないでください。 –

+1

しかし、なぜこのような「何か」がどのように使われているのか理解せずに、何かが何らかの機能を果たすのは理解できません。 'getState'の結果はgetterを介してのみ使用されるため、変更しないでください。オブジェクト全体をコピーするだけで時間とサイクルが浪費されます。 – raina77ow

答えて

3

2つの理由:1)適切なReduxアプリケーションでは、状態を直接変更する必要はありません。したがって、getState()結果はゲッターでのみ使用されるため、コピーに時間とサイクルを浪費する必要はありません。 2)実際には、正しい方法でコピーするのは簡単ではありません。 corresponding issueから関連する説明を引用:

あなたは ことができないだろうとあなたは、本当にすべての 参照を破壊するために、我々はそれをしたくないだろう深いオブジェクトの割り当てを伴う必要があるだろう、コンペア状態ツリーの特定の部分が変更された場合は、 はshouldComponentUpdate経由でReactで非常に便利です。

それでも、人はそれが(どこか他のそのようなオブジェクトを変異に対する)安全装置としてObject.freeze()以上取得した状態を使用することが有益だ決めるかもしれません。しかし、あまりにも多くの周りに結果の状態を渡すことはめったに良いパターンではありません(this answerで述べたように)。

0

私はあなたが店とそれが含んでいる状態をComponentの状態と混同していると思います。 これは2つの異なる概念です。 getState()を呼び出すと、 "this"コンポーネントの状態が取得されます。明らかにそれを変更すべきではありません。ただし、setState()を使用して変更することができます。これにより、コンポーネントの再描画がトリガーされます。 あなたがレジューサー内にいて、アクションがレデューサーの状態を変更する結果になる場合、返された状態は常に新しいオブジェクトでなければなりません。

+0

私はあなたが私の質問を誤解しているかもしれないと思います。私は** storeオブジェクトの '.getState()'について話しています。 'redux.createStore()'で作成したもの –

関連する問題