Plan de transformation Vuex en TSX : Comment gérer Vuex dans le projet de transformation TS Vue2 ?

Les vuex les plus populaires incluent actuellement : vuex-aggregate, vuex-class, vuex-module-decorators

npm en a trouvé des similaires, regardez le tableau de tendances : vuex-aggregate vs vuex-class vs vuex-class-component vs vuex-class-module vs vuex-class-modules vs vuex-module-decorators | tendances npm

Étoiles Problèmes Version Mis à jour Créé

vuex-agrégat

14 19 4.1.3 il y a 4 ans il y a 4 ans

classe vuex

1 670 18 0.3.2 il y a 3 ans il y a 5 ans

composant de classe vuex

213 40 2.3.6 il y a 2 mois il y a 3 ans

module de classe vuex

0.0.16 il y a 3 ans il y a 5 ans

modules de classe vuex

175 17 1.3.0 il y a un an il y a 3 ans

vuex-module-décorateurs

1 705 131 2.0.0 il y a 2 mois il y a 4 ans

En fait, ce qui peut être comparé, c'est vuex-class et vuex-module-decorators. Personnellement, je préfère vuex-class. Bien sûr, les deux peuvent être combinés et utilisés ensemble. L'un est défini dans le magasin et l'autre est utilisé dans le composant vue.

classe vuex

Adresse du projet : GitHub - ktsn/vuex-class : Assistants de liaison pour Vuex et vue-class-component Bien que cette chose n'ait pas été mise à jour depuis trois ans, il n'y a rien de mal à cela.

Cela doit être utilisé conjointement avec vue-class-component.

importer { Composant en tant que tsc } depuis 'vue-tsx-support' ;
importer { Component, Prop } depuis 'vue-property-decorator' ;
importer {State, Getter, Action, Mutation, espace de noms} depuis 'vuex-class'
const someModule = espace de noms ('chemin/vers/module')
@Composant
exporter la classe par défaut La démo étend tsc<Props> {
    @State(state => state.bar) stateBar
    @Getter('foo') getterFoo
    @someModule.Getter('foo') moduleGetterFoo
    rendre(){
        retour (
            <div>démo</div>
        )
    }
}

Son utilisation est pratique pour une utilisation dans les composants via des décorateurs. Le magasin vuex d'origine n'a pas du tout besoin d'être modifié.

Mais si vous utilisez @vue/composition-api, vue-class ne peut pas être utilisée. Il est recommandé d'utiliser vuex-module-decorators ici.

vuex-module-décorateurs

GitHub - championswimmer/vuex-module-decorators : décorateurs TypeScript/ES7 pour créer des modules Vuex de manière déclarative

Documentation officielle : Modules avec espace de noms | vuex-module-decorators

C'est pratique pour définir des modules de magasin

importer {Module, VuexModule, Mutation, Action} depuis 'vuex-module-decorators'
interface d'exportation Informations utilisateur {
  nom : chaîne ;
  âge:numéro
}
@Module
exporter la classe par défaut UserInfo étend VuexModule {
  nom = 'zhoulujun'
  âge = 30

  @Mutation
  setUser (utilisateur : UserInfo) {
    ce.nom = utilisateur.nom
  }
  // l'action 'incr' valide la mutation 'increment' une fois terminée avec la valeur de retour comme charge utile
  @Action({ commit : 'setUser' })
  getUtilisateur() {
    // This.setUser ne peut pas être appelé directement
    retour 5
  }
  // l'action 'incr' valide la mutation 'increment' une fois terminée avec la valeur de retour comme charge utile
  @Action
  getUser(id) {
    retourner http.getUser(id).then((user)=>{
        this.context.commit('setUser', utilisateur);
    })
  }
}

Créer une boutique

import Vue from 'vue';
importer Vuex depuis 'vuex' ;
importer { UserInfo } depuis './modules/user' ;

Vue.use(Vuex);

interface d'exportation IRootState {
  utilisateur : Infoutilisateur
}
exporter le nouveau Vuex.Store<IRootState>({
  // modules: {
  // utilisateur : Utilisateur,
  // },

});

Le point dont il faut se plaindre ici est que la fonction du décorateur @Action appelle directement la méthode décorée @Mutation.

@MutationAction

Dans vuex, vous devez modifier les données dans l'état via la validation. Il existe un modificateur MutationAction dans vuex-module-decorators, qui peut modifier directement les données d'état.

la classe par défaut d'exportation PassengerStore étend VuexModule {
  nom d'utilisateur public = '';
  mot de passe public = '';
 
  //'nom d'utilisateur' et 'mot de passe' sont remplacés par l'objet renvoyé,
  //Le format doit être `{username :..., password :...}` 
  @MutationAction({muter : ['nom d'utilisateur', 'mot de passe'] })
  async setPassenger (nom : chaîne) {
    réponse const : any = wait request(name); // L'interface renvoie [{name:'Zhang San',password:'123456'}]
    //La valeur de retour ici doit être cohérente avec le nom après la mutation ci-dessus ;
    retour {
      nom d'utilisateur : réponse[0].name,
      mot de passe : réponse[0].mot de passe,
    } ;
  }
}

Mais pour cette méthode, les données structurelles doivent avoir été déterminées. Nous l’utilisons encore relativement rarement.

Généralement, this.context.commit est utilisé directement en action.

modules de classe vuex

vuex-module-decorators et sont des choses similaires. Pour une utilisation détaillée, veuillez vous référer à : Décorateurs de classe Typescript pour les modules vuex | BestofVue

Pas grand chose d'autre à dire.

vue-class et vuex-module-decorators combinés

Autrement dit, la partie données du magasin utilise vuex-module-decorators et, dans le composant, vue-class est utilisée pour appeler le magasin.

Il s'agit de la collection des deux premiers morceaux de code ci-dessus.

Bien que @vue/composition-api écrive des composants vue2, il peut être facilement mis à niveau vers vue3 à l'avenir. Mais vue-class-component aura également une version vue3 dans le futur.

Sur le plan personnel, je me sens très mal à l'aise avec l'aspect héritage de classe @vue/composition-api.

Voir l'article :
L'état de Vuex typé : l'approche la plus propre    https://betterprogramming.pub/the-state-of-typed-vuex-the-cleanest-approach-2358ee05d230

Première expérience avec Vue & TypeScript - en utilisant Vuex (vuex-module-decorators)  Première expérience avec Vue & TypeScript - en utilisant Vuex (vuex-module-decorators) - Nuggets

Réimprimé de l'article de ce site « Le plan de transformation de Vuex dans TSX : Comment gérer Vuex dans le projet de transformation TS Vue2 ? » 》,
merci d'indiquer la source : Plan de transformation Vuex en TSX : Comment gérer Vuex dans le projet de transformation TS Vue2 ? - Résumé de l'entrée de vue - Site personnel de Zhou Junjun

Guess you like

Origin blog.csdn.net/u012244479/article/details/123778697