2017-11-02 13 views
0

突然変異がコミットされるたびに何かをするプラグインを書くことができます。同様の機能を持つ方法はありますか?アクションごとに突然変異を呼び出すVuex

私はあなたがvuexfire libraryのようなアクションを「強化する」ことができることに気付きました。これはこれを行う最良の方法ですか?

私の目標は、現在/未処理のajax呼び出しが現在保留中であるかどうかを追跡する方法を持ち、その番号に基づいて何らかの種類のアニメーションを自動的に表示することです。

編集:明らかにするために、Vuexだけを使用して追加のライブラリを使用せずにこれを行う方法があるかどうかは疑問です。

+0

ライブラリ/製品の推奨を求めている、またはそれを自分で行う方法? – david25272

+0

申し訳ありません、自分自身でやり直す方法。私はそこにいくつかのlibsを見てきました、ほとんどの既存のアクションを追加機能でラップして、突然変異を処理します。この時点で唯一の選択肢と思われますが、他の誰かがこれらの行に沿って何かを行ったかどうかを確認したいと考えました。たとえばReduxは、これはミドルウェアを使用してこれを可能にしますが、Vuexはそうではないと思います。 – xenetics

答えて

1

Vuex v2.5以降では、subscribeActionを呼び出して、ストア内の各ディスパッチアクションの後に呼び出されるコールバック関数を登録できます。

コールバックは、最初の引数と店舗のstate第二引数としてとしてaction記述子(typeと​​プロパティを持つオブジェクト)を受信します。

このドキュメントはVuex API Reference pageです。例えば

const store = new Vuex.Store({ 
 
    plugins: [(store) => { 
 
    store.subscribeAction((action, state) => { 
 
     console.log("Action Type: ", action.type) 
 
     console.log("Action Payload: ", action.payload) 
 
     console.log("Current State: ", state) 
 
    }) 
 
    }], 
 
    state: { 
 
    foo: 1 
 
    }, 
 
    mutations: { 
 
    INCREASE_FOO(state) { 
 
     state.foo++; 
 
    }, 
 
    }, 
 
    actions: { 
 
    increaseFoo({ commit }) { 
 
     commit('INCREASE_FOO'); 
 
    } 
 
    } 
 
}); 
 

 
new Vue({ 
 
    el: '#app', 
 
    store, 
 
    methods: { 
 
    onClick() { 
 
     this.$store.dispatch('increaseFoo'); 
 
    } 
 
    } 
 
})
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.2/vue.min.js"></script> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/vuex/3.0.1/vuex.min.js"></script> 
 

 
<div id="app"> 
 
    Foo state: {{ $store.state.foo }} 
 
    <button @click="onClick">Increase Foo</button> 
 
</div>

+0

が完璧です。私はこれがvuexであったことを知らなかった、比較的最近の追加。ありがとう! – xenetics

関連する問題