2017-04-06 5 views
6

Vuexストア突然変異内で、ゲッターにアクセスすることは可能ですか?以下の例を考えてみましょう。私はちょうど突然変異内stateオブジェクトに直接questionプロパティにアクセスする可能性があるためVuex突然変異内のゲッターへのアクセス

new Vuex.Store({ 
    state: { 
     question: 'Is it possible to access getters within a Vuex mutation?' 
    }, 
    mutations: { 
     askQuestion(state) { 
      // TODO: Get question from getter here 
      let question = ''; 

      if (question) { 
       // ... 
      } 
     } 
    }, 
    getters: { 
     getQuestion: (state) => { 
      return state.question; 
     } 
    } 
}); 

はもちろんの例では、あまり意味がありませんが、私はあなたが私がやろうとしていますか見て期待しています。つまり、状態を条件付きで操作します。

変異の中で、thisundefinedあるとstateパラメータがstateオブジェクトではなく、店舗の他の部分へのアクセスを提供します。

The documentation on mutationsには、これについては何も言及していません。

私が何かを見逃していない限り、それは可能ではないと思われるでしょうか?私は、アクションがストアコンテキスト全体にアクセスできるので、ストアの外でこのロジックを実行する(コードの重複を招く)、またはこれを実行するアクションを実装することもできます。私はそれがより良いアプローチであることを確信しています。それは実際に何をすべきかに焦点を当てて突然変異を保つことです。状態を突然変異させる。それはおそらく私がやることですが、突然変異の中でゲッターにアクセスすることも可能ですか?

+0

をあなたは多分あなたは突然変異でゲッターを必要とするだろう理由に手の込んだてもらえますか?あなたは、あなたの例が 'state.question'を簡単に参照できることは間違いありません。そして、はい、現在の状態に基づいて異なる*アクション*をとるロジックは、アクションで処理する必要があります。 – thanksd

+1

アクションは最初の引数としてコンテキストを取得するため、アクション内のゲッターにアクセスできます。アクション:{action1:(context、payload)=> {console.log(context.getters.getSomething); }}。突然変異はローカルの「状態」だけを受け取るので、あなたが突然変異でそれを行うことができるかどうかはわかりません。 – wostex

+0

@thanksd私の実際のコードはこれより複雑なので、何かをチェックする必要があります。具体的な例は、カートに商品を追加することです。その商品がすでにあるかどうかを確認したいと思います。私はそれをきれいに保つために突然変異の論理を維持したかったのです。私は確かに、最良のアプローチはアクションを使うことだと確信していますが、何らかの理由で突然変異内のゲッターにアクセスすることさえ可能であるかどうか不思議でした。 – Andy0708

答えて

2

Vuexストア突然変異法は、ゲッターに直接アクセスすることはできません。

これはおそらく悪い習慣ですが、そうのような突然変異コミットするときにgettersへの参照を渡すことができます。

actions: { 
    fooAction({commit, getters}, data) { 
    commit('FOO_MUTATION', {data, getters}) 
    } 
}, 
mutations: { 
    FOO_MUTATION(state, {data, getters}) { 
    console.log(getters); 
    } 
} 
+0

ありがとう!私はより適切と思われるような行動をとるつもりです。私はgettersに沿って渡すことが回避策であることに同意しますが、それにもかかわらず、私は考えていませんでした。解明してくれてありがとう! :-) – Andy0708

関連する問題