Vuex: do we need mutation_types?

Do we get any benefit from mutation types vs simply using strings for mutation names? Here are some reasons that plain strings are preferable to me:

  1. Vuex warns if you commit an action that doesn't exist

This isn't quite as good/useful as the static analysis, but means we can catch this in tests. And we could probably statically analyze check that any commit() has a valid mutation as the first argument

  1. We don't use types for dispatch. These two lines that should almost identical look very different
dispatch('doThatThing');
commit(types.DO_THAT_THING);
  1. Relatedly, why are we using UPPER_SNAKE_CASE? Makes sense for the mutation_types file, since they are constants. But in the actual mutations file (i.e. the thing that is actual code that we use) we have FUNCTION_NAMES_FORMATTED_LIKE_THIS

  2. Save $$$ on keystrokes. Never type types. again!

I also don't really like computed keys in objects. Compare:

import * as types from './mutation_types';

export default {
  [types.REQUEST_METRICS_DATA](state) {
    return 🤮;
  }
}

export default {
  REQUEST_METRICS_DATA(state) {
    return 😎;
  }
}
  1. Benefits for JetBrains editor users

observation from @winh

at least it jumps to mutations if you click on the strings (which it does not when using mutation types)

Edited Jun 03, 2019 by Simon Knox
Assignee Loading
Time tracking Loading