例えばユニークなIDの配列を保持し追加削除する場合、既に追加されてるかどうかの判定が必要になります。この判定をmutationで行なうべきか、actionで行なうべきか、それとも両方で行なうべきか、悩みます。

mutationの処理が走る場合は必ず変更される方がいい気がします。そうするとactionでstateを見て必要ならばmutationの処理を走らすという流れにしたくなります。しかしvueではmutationの実行は一応はどこからでもできるのでactionのみに変更するかしないかの分岐を書くのも不安です。そもそも「commitする場合は必ず変更される」という考え方自体どうなのか。。。。

ご意見聞かせてください。

state: {
    someList: [1,2,3],
},
mutations: {
    add(state, id){
        state.someList.push(id);
    },
    remove(state, id){
        state.someList.splice(state.someList.indexOf(id), 1);
    },
},
actions: {
    add({commit, state}, {id}){
        if ( state.someList.indexOf(id) < 0 ) {
            commit('add', id);
        }
    },
    remove({commit, state}, {id}){
        if ( state.someList.indexOf(id) >= 0 ) {
            commit('remove', id);
        }
    },
}