2017-09-12 3 views
0

私のvuexの突然変異が新しいアクションをディスパッチするにはどうすればよいですか?私のvuex突然変異は、どのように新しい行動を起こすことができますか?

updateSelectedItems: (context, payload) => { 
    context.commit('updateSelectedItems', payload); 
}, 

し、リストを更新変異:

は基本的に私は、突然変異を呼び出すアクションを持っています。それはまた、新しい項目を取得します。私はこれらの新しいアイテムに何かをする必要があります。

updateSelectedItems: (state, payload) => { 
    var newItems = _.differenceWith(payload, state.selectedItems, function (a, b) { 
    return a.name === b.name; 
    }); 
    state.selectedItems = _.cloneDeep(payload); 

    _.each(newItems, (item) => { 
    // How do I do this?? 
    context.dispatch('getItemDetail', item.name) 
    }); 
}, 

答えて

0

それは本当にあなたの変異があまりにも多くを行うようにする最善の方法はありません。彼らが超シンプルで一般的に一つのことをしているのなら最高です。状態に影響を及ぼす可能性のある、多段階のプロセスをあなたの行動で処理しましょう。

このような構造がより理にかなってあなたの例:

actions: { 
    updateSelectedItems(context, payload) { 
    var selectedItems = context.state.selectedItems; 
    var newItems = _.differenceWith(payload, selectedItems, (a, b) => { 
     return a.name === b.name; 
    }); 

    context.commit('setSelectedItems', payload); 

    _.each(newItems, (item) => { 
     context.dispatch('getItemDetail', item.name) 
    }); 
    }, 
    getItemDetail(context, payload) { 
    // ... 
    } 
}, 
mutations: { 
    setSelectedItems(state, payload) { 
    state.selectedItems = _.cloneDeep(payload); 
    } 
} 

あなたは本当に(私は非常にないがやってお勧めします)突然変異の内側から何かを派遣する必要がある場合は、することができますペイロードの一部としてディスパッチ機能を突然変異に渡す。

+0

これは素晴らしいです。私はその行為が国家への読書アクセス権を持っているのを知りませんでした。ありがとうございました。 – Justin808

関連する問題