store
にはgetState
というメソッドがあり、ストアの現在の状態が返されます。コードがストア状態を変更できないのはなぜですか?
私のアプリケーションのどこかのコードが、(偶然に)返されたstate
をstore
から変更しないようにするにはどうすればよいですか?
のは、私がこれを呼び出すとしましょう:私はstore
オブジェクトにgetState
に見つけた
let state = store.getState();
state.someProperty = 'fun';
実装は単にそれぞれの新しいアクションで上書きされます内部状態オブジェクトを返します。
const getState =() => state;
アクション/新しい状態の間で、コードが他のサブスクライバによって読み取られる状態を変更できないのはなぜですか?上記の例では、someProperty
を'fun'
に設定すると、state
プロパティのstore
の内部に上書きされます。
私は明らかに状態を変更するはずはありませんが、簡単な間違いは、(意図的に)入力を変更するコンポーネントに状態をバインドする可能性があります。
<app-some-component [user]="state"></app-some-component>
そのstate
モデルのクローンとして実装されていないgetState()
べきか?
P.S.これはAngularとは特に関係していません。なぜなら、Angularに使われていない人が多いため、質問に答えることができるようにするためです。
immutable(immutable.jsなど)のモデルを持っている必要があるか、テスト/開発時に私の状態をフリーズする必要がありますが、プロダクションでフリーズする必要はありません。 –
私が言ったように、Redux自体には、不変のものは何もありません。レデューサーコードを慎重に書いたり、不変の更新ユーティリティーlibを使用していても、技術的にはコードのどの部分も 'getState'を呼び出して内容を変更することができます。それが起こらないことを保証したい場合は、プレーンなJSオブジェクト以外のものを使用するか、プレーンなオブジェクトをフリーズさせて、コードがどこにも変化しないようにする必要があります。つまり、アプリケーションの残りの部分は、どこでも状態を変更する必要はありませんが、間違っていることがあります。 – markerikson
これは悪いと思うのを助けることはできません - 事故になりやすい - 自動テストがこれまで以上に重要になるでしょう... –