web-dev-qa-db-ja.com

Vuex:アクションからゲッターを呼び出す

ディスパッチ/アクションがその中にゲッターを呼び出す方法はありますか?

mutations: {
    setData(state, data) {
        state.data = data;
    }
}
actions: {
    sendDataToServer({ commit }, payload) {
        // call getter (data) and assign to variable
        // do async functions from the data returned
    }
},
getters: {
    getAppData: state => () => {
        return state.data;
    }
}

それでは、ここでのベストプラクティスは何ですか?ミューテーションを使用して状態を変更し、状態を取得してアクションに渡すと、非同期関数が実行されますか、実装を再構築する必要がありますか?

突然変異を呼び出す-> getterを介してデータを取得する->アクションを呼び出す

OR

すべてをアクションで実行します(アクションを変更し、ゲッターを必要とせずにアクション/非同期メソッドを実行します)?

14
The Bassman

アクションでは、最初のパラメーターに{commit}が含まれています。同様に、{commit, state}を渡すことができます。これにより、state.dataに直接アクセスできます。

あなたの例では、commit('setData')を使用して内部アクション自体からミューテーションを呼び出すことができるため、アクションを実行したいと思います。

最初のパラメーターは、必要に応じて状態と突然変異を使用するためのものです。個人的に、私はあなたが最初にアクションを実行し、それをアプリに保存するためにミューテーションを行うプロジェクトに取り組んできました。たとえば、車の情報をサーバーのどこかに保存する場合は、最初にアクションを実行します(そして、リモートデータベースに保存します)。データベースに保存されたことを確認したら、ストアでローカルに変更します。これは完全にケースバイケースに依存します。しかし、良いことは、アクションの内側から変異できることです

8
Sujil Maharjan

コミットに加えて、アクションにはdispatchgetters、およびrootGettersというデフォルトの注入パラメーターがあります。だから、あなたは簡単に書くことができます。

sendDataToServer({ commit, getters }, payload)はゲッターにアクセスします。

28
Tugay İlik