2017-06-01 11 views
4

jsonオブジェクトに適用したいフィルタのリストがあります。Vue.js [vuex]突然変異からの発送方法は?

私の変異は、次のようになります。これは、トラブル時にユーザに私を取得するので、私は単にリストをdownfiltering維持することはできませんので、そのためのフィルタがどのように動作するかの

const mutations = { 
    setStars(state, payload) { 
     state.stars = payload; 
     this.dispatch('filter'); 
    }, 

    setReviews(state, payload) { 
     state.reviews = payload; 
     this.dispatch('filter'); 
    } 
}; 

私は再びそれらをすべて再適用する必要がありますフィルタオプションの選択を解除します。

だから、スターフィルターやレビューフィルター(ユーザーがフィルターをかけている)に突然変異が起こっているときは、すべてのフィルターを実行する関数を呼び出す必要があります。

私の最も簡単なオプションは何ですか?何らかのヘルパー関数を追加したり、実際に結果をフィルタリングする突然変異を呼び出すアクションを設定することはできますか?

+0

あなたはフィルタリングされたデータを返す必要があり、あなたのストレージを変異する必要はありません。データをそのままにして、フィルタリングされたデータを返すgetterを作成します.2つのgetter(それぞれの場合に1つ)または引数を受け入れる1つのgetter(フィルタ条件)のいずれかです。関連する読者:https://vuex.vuejs.org/en/getters.html – wostex

+0

@wostexただ1つのフィルタだったら私はあなたに同意するだろうが、単一の値に対して複数のフィルタを同時に適用する必要がある。だから私は1つまたは2つのゲッターを別々に使うことはできません。彼らは一緒に働く必要があります。 –

+0

ゲッターは別のゲッターを呼び出すことができます。 – wostex

答えて

8

突然変異はさらなるアクションをディスパッチできませんが、アクションは他のアクションをディスパッチできます。したがって、1つの選択肢は、アクションに突然変異をコミットさせてから、フィルターアクションをトリガーすることです。

可能であれば、計算されたプロパティのようにデータ変更に自然に反応するすべてのフィルタをgettersにすることもできます。他のアクションを呼び出すアクションの

例:

// store.js 
export default { 
    mutations: { 
    setReviews(state, payload) { 
     state.reviews = payload 
    } 
    } 

    actions: { 
    filter() { 
     // ... 
    } 

    setReviews({ dispatch, commit }, payload) { 
     commit('setReviews', payload) 
     dispatch('filter'); 
    } 
    } 
} 


// Component.vue 
import { mapActions } from 'vuex'; 

export default { 
    methods: { 
    ...mapActions(['setReviews']), 
    foo() { 
     this.setReviews(...) 
    } 
    } 
} 
+0

私が行う全ての突然変異で、私はVueコンポーネントの直後にディスパッチを呼び出す必要がありますか?私は私のVuex店内の突然変異から行動を呼び出すことができないのですから? –

+0

@ Stephan-v実際には、コンポーネントが突然変異の 'setReviews'アクション_instead_を送出するでしょう。 _action_は、 'setReviews'突然変異をコミットし、' filter'アクションを引き起こすことができます。 – Matt

+0

意味があります。しかし、どのようにして私のVuexストア内のアクションから別のアクションを適切に呼び出すことができますか? –

関連する問題