Verwendung des Vuex-Namespace

Verwendung des Vuex-Namespace

Da Vuex einen einzelnen Zustandsbaum verwendet, werden alle Anwendungszustände in einem relativ großen Objekt konzentriert. Wenn Ihre Anwendung sehr komplex wird, kann das Store-Objekt ziemlich aufgebläht werden.

Daher ermöglicht uns Vuex, den Store in Module aufzuteilen, von denen jedes seinen eigenen Status, seine eigene Mutation, Aktion, seinen eigenen Getter und sogar verschachtelte Untermodule hat.

Standardmäßig werden Aktionen, Mutationen und Getter innerhalb eines Moduls im globalen Namespace registriert, sodass mehrere Module auf dieselbe Mutation oder Aktion reagieren können. Wenn Sie für Ihr Modul eine höhere Kapselung und Wiederverwendbarkeit wünschen, wird das Namespace-Konzept verwendet.

{
    "Modul 1":{
        Zustand:{},
        Getter:{},
        Mutationen:{},
        Aktionen:{}
    },
    "Modul 2":{
        Zustand:{},
        Getter:{},
        Mutationen:{},
        Aktionen:{}
    }
}

Der erste Parameter von mapState, mapGetters, mapMutations und mapActions ist eine Zeichenfolge (Namespace-Name) und der zweite Parameter ist ein Array (muss nicht umbenannt werden)/Objekt (muss umbenannt werden).

mapXXXs('Namespacename',['Attributname 1','Attributname 2'])

mapXXXs('Namespace-Name',{

  'Neuer Name 1 in Komponente': 'Ursprünglicher Name 1 in Vuex',

  'Neuer Name 2 in Komponente': 'Ursprünglicher Name 2 in Vuex',

})

Projektstruktur

mian.js

importiere Vue von „vue“;
App aus "./App.vue" importieren;
Router aus "./router" importieren;
Store aus "./store/index" importieren;

Vue.config.productionTip = falsch;

neuer Vue({
  Router,
  speichern,
  rendern: h => h(App)
}).$mount("#app");

index.js

importiere Vue von „vue“;
importiere Vuex von „vuex“;
importiere cat aus "./modules/cat";
importiere Hund aus "./modules/dog";

Vue.use(Vuex);

exportiere standardmäßig neuen Vuex.Store({
  Module: { Katze, Hund }
});

Katze.js

Standard exportieren {
  Namespace: wahr,
  // lokaler Status: {
    Name: "Blau-weiße Britisch Kurzhaar",
    Alter: 1
  },
  // Lokale Lese-Getter: {
    desc: state => "Haustier: " + state.name
  },
  // Lokale Änderungen Mutationen: {
    Inkrement(Zustand, Nutzlast) {
      Zustand.Alter += Nutzlast.Anzahl;
    }
  },
  // Lokale Aktionen actions: {
    wachsen(Kontext, Nutzlast) {
      setzeTimeout(() => {
        Kontext.commit("Inkrement", Nutzlast);
      }, 1000);
    }
  }
};

hund.js

Standard exportieren {
  Namespace: wahr,
  // lokaler Status: {
    Name: "Labrador",
    Alter: 1
  },
  // Lokale Lese-Getter: {
    desc: state => "Haustier: " + state.name
  },
  // Lokale Änderungen Mutationen: {
    Inkrement(Zustand, Nutzlast) {
      Zustand.Alter += Nutzlast.Anzahl;
    }
  },
  // Lokale Aktionen actions: {
    wachsen(Kontext, Nutzlast) {
      setzeTimeout(() => {
        Kontext.commit("Inkrement", Nutzlast);
      }, 1000);
    }
  }
};

hallo.vue

<Vorlage>
  <div Klasse="hallo">
    <h3>Vuex-Zustandsbaum</h3>
    <div>{{dieser.$store.state}}</div>
    <h3>Kartenstatus</h3>
    <div>{{catName}} {{catAge}}</div>
    <div>{{Hundename}} {{Hundealter}}</div>
    <h3>Kartengetter</h3>
    <div>{{catDesc}}</div>
    <div>{{dogDesc}}</div>
    <h3>Kartenmutationen</h3>
    <button @click="catIncrement({num:1})">Cat-Änderungen</button>
    <button @click="dogIncrement({num:1})">Hundewechsel</button>
    <h3>Kartenaktionen</h3>
    <button @click="catGrow({num:1})">Katzenaktion</button>
    <button @click="dogGrow({num:1})">Hundeaktion</button>
  </div>
</Vorlage>

<Skript>
importiere { mapState, mapGetters, mapMutations, mapActions } von „vuex“;

Standard exportieren {
  Name: "Hallo Welt",
  berechnet: {
    ...mapState("Katze", {
      catName: "Name",
      catAge: "Alter"
    }),
    ...mapState("Hund", {
      dogName: "Name",
      dogAge: "Alter"
    }),
    ...mapGetters("Katze", {
      catDesc: "Beschreibung"
    }),
    ...mapGetters("Hund", {
      dogDesc: "absteigend"
    })
  },
  Methoden: {
    ...mapMutations("Katze", { catIncrement: "Inkrement" }),
    ...mapMutations("Hund", { dogIncrement: "Inkrement" }),
    ...mapActions("Katze", { catGrow: "wachsen" }),
    ...mapActions("Hund", { dogGrow: "wachsen" })
  }
};
</Skript>

<!-- Fügen Sie das Attribut „scoped“ hinzu, um CSS nur auf diese Komponente zu beschränken -->
<style scoped lang="scss">
</Stil>

Wirkung der Operation

Dies ist das Ende dieses Artikels über die Verwendung des Vuex-Namespace. Weitere relevante Inhalte zum Vuex-Namespace finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • So implementieren Sie modulare Einstellungen von Vuex im Nuxt-Framework
  • Detaillierte Erläuterung der modularen Aufteilungspraxis von Store unter Vuex
  • Lernen Sie Vuex und Modularität anhand eines einfachen Beispiels
  • Tiefgreifendes Verständnis der Vuex-Modularität (Modul)
  • Eine kurze Diskussion über den Namespace des Stores in Vuex
  • Beispieldemonstration der Vuex-Modularisierung und Namespaces

<<:  Beispiele für die Verwendung temporärer Tabellen in MySQL

>>:  Detaillierte Erklärung der Funktionen jedes Ports von Tomcat

Artikel empfehlen

Hexadezimale Farbcodes (vollständig)

Rot und Pink und ihre Hexadezimalcodes. #990033 #...

MySQL 5.6-Binärinstallationsprozess unter Linux

1.1 Download des binären Installationspakets wget...

Detaillierte Erklärung zum virtuellen Javascript-DOM

Inhaltsverzeichnis Was ist virtueller Dom? Warum ...

So verwenden Sie die JSZip-Komprimierung in CocosCreator

CocosCreator-Version: 2.4.2 Praktische Projektanw...

Benutzerdefinierte optionale Zeitkalenderkomponente von Vue

In diesem Artikelbeispiel wird der spezifische Co...

Implementierung des Whack-a-Mole-Spiels in JavaScript

In diesem Artikel finden Sie den spezifischen Cod...

Eine kurze Diskussion über die Typen von node.js-Middleware

Inhaltsverzeichnis Überblick 1. Middleware auf An...

Vue verwendet OSS zum Hochladen von Bildern oder Anhängen

Verwenden Sie OSS, um Bilder oder Anhänge in ein ...

Webdesign-Tipps für Formular-Eingabefelder

1. Gestricheltes Feld, wenn die Abbrechen-Schaltfl...

MySQL-Rekursionsproblem

MySQL selbst unterstützt keine rekursive Syntax, ...

Praxis der Verwendung von Vite2+Vue3 zum Rendern von Markdown-Dokumenten

Inhaltsverzeichnis Benutzerdefinierte Vite-Plugin...

Lernen Sie, wie Sie mit vscode eine React-Native-Entwicklungsumgebung erstellen

Frage Der Code hat keine Eingabeaufforderung: Vie...

Vollständiges Beispiel der Kapselung der globalen Toast-Komponente durch Vue

Inhaltsverzeichnis Vorwort 1. Mit vue-cli 1. Defi...

Implementierungsidee zur Linksausrichtung der letzten Zeile des Flexbox-Layouts

Wenn es sich bei der Verwendung des Flex-Layouts ...