2017-12-18 9 views
1

ステートオブジェクトをデフォルト値にリセットするRESET突然変異があります。見つけた解決策はstate = defaultStateの代わりにObject.assign(state, defaultState)になります。特定のプロパティの=で影響を受けるが、状態オブジェクト全体では機能しません。VUEX:なぜ状態オブジェクト全体に影響を与えることができないのですか?

は仕事:

RESET: (state) => { 
    Object.assign(state, defaultState); 
} 

が動作しない:

RESET: (state) => { 
    state = defaultState; 
} 
+0

このように状態を変更するのは危険ですか?あなたは状態オブジェクトをコピーして、それを変形し、新しい状態を返すべきではありませんか?また、おそらく明示的にオブジェクトのディープコピーを行う必要があります。私はFluxの実装があなたのためにそれを行うかどうかは分かりません。 https://redux.js.org/docs/recipes/reducers/ImmutableUpdatePatterns.html - これはReduxの投稿ですが、ベストプラクティスはそのまま適用されます。 – ethane

+0

私は、Vueデバッガツールで突然変異がそのように呼び出されたときに影響を受ける特定のプロパティを見ることができるので、不変のアスペクトはvuex librairieによって内部的に処理されると思います! CF https://vuex.vuejs.org/en/mutations.html –

答えて

1

これは仕方jsの作品によるものです。 =で新しいオブジェクトを設定すると、メモリ内に新しいアドレスを持つまったく新しいオブジェクトなので、vuexはそれを追跡する方法を知りません。

Object.assign(state, defaultState);を使用すると、基本的に同じオブジェクトが保持され、新しい値にプロパティが設定されます。

関連する問題