web-dev-qa-db-fra.com

Comment appeler une fonction d'assistance partagée à partir d'une mutation ou d'une action dans Vuex

J'essaie de séparer un code commun à de nombreux appels dans mes mutations Vuex. J'ai l'impression que cela est découragé mais je ne comprends pas pourquoi.

Jetez un œil à l'image d'un exemple de code ci-dessous:

J'ai ajouté cette entrée "helpers" dans Vuex - cela n'existe évidemment pas, mais comment puis-je appeler la fonction d'assistance partagée "getColumn" à partir de mutations et/ou d'actions?

enter image description here


Ou dois-je recourir à l'appel d'une méthode statique sur une classe 'VuexHelper'? :(

Quelque chose comme:

enter image description here

Remarque J'ai déjà examiné les éléments suivants:

  1. Vue Mixins - oui, quelque chose comme ça pourrait fonctionner mais n'est pas pris en charge dans Vuex - aussi, vue ne renvoient pas de valeur ...
  2. J'ai regardé les modules, mais ceux-ci ne me donnent toujours pas ce dont j'ai besoin, c'est-à-dire une simple fonction réutilisable qui renvoie une valeur.

Merci

8
Marcel

Je ne vois pas pourquoi vous voudrez peut-être mettre la fonction d'assistance dans le magasin. Vous pouvez simplement utiliser une fonction simple.

function getColumn(state, colName) {
  // Do your thing.
}

const vstore = new Vuex.Store({
  // ....
  mutations: {
    removeColumn(state, colName) {
      var column = getColumns(state, colName);
    }
  }
};

En revanche, si vous en avez vraiment besoin, vous pouvez accéder au module brut et à tout ce qui est inclus:

var column = this._modules.root._rawModule.helpers.getColumns(state, colName);

Bien que cette syntaxe ne soit pas documentée et puisse changer pour les versions ultérieures.

9
dereli

Vous voudrez peut-être implémenter getColumn en tant que fonction getter sur votre magasin VueX. Par exemple:

getters: {
  getColumn: state => colName => {
    ... return column;
  }
}

Maintenant, getColumn peut être utilisé dans le magasin comme suit:

let x = getters.getColumn('colNameString');
1
Gal Weissman