Die Syntax und Verwendung von vuex

Inhaltsverzeichnis

1. Erklärung von vuex

2. Vorteile von vuex

3. Verwenden Sie Schritte

1. Installieren Sie Vuex

2. Referenz-Vuex 

3. Erstellen Sie ein Lagerhaus

4. Enthält Module

1. Zustand

2. Getter

So erhalten Sie { {newCount}} in der Komponente :

3. Mutationen

Wenn wir den Commit übermitteln, entspricht der erste Parameter „Increment“ der Increment-Methode in Mutationen, und der zweite Parameter ist der benutzerdefinierte Wert. Zum Beispiel:

So erhalten Sie { {count}} in der Komponente :

4. Aktion

5. Module

moduleA.js / moduleB.js-Dateien

Fünf, das einfachste Projektbeispiel von Vuex

1. Daten speichern

2. Daten abrufen

3. Dateiverzeichnisstruktur speichern

 index.js

state.js

mutationen.js

Aktionen.js

getters.js

4. Laden verwenden

6. Wird im Vue3-Setup verwendet


1. Erklärung von vuex

Vuex ist ein speziell für Vue entwickelter Zustandsverwaltungsmodus für Anwendungen , der den Zustand aller Komponenten der Anwendung zentral speichert und durch entsprechende Regeln dafür sorgt, dass sich der Zustand auf vorhersehbare Weise ändert.

Kurz gesagt, Vuex verwendet ein Formular , das einem globalen Objekt ähnelt , um die gemeinsamen Daten aller Komponenten zu verwalten. Wenn Sie die Daten dieses globalen Objekts ändern möchten, müssen Sie es gemäß der von Vuex bereitgestellten Methode ändern ( Sie können es nicht in ändern dein eigener Weg ).

2. Vorteile von vuex

Die Vuex-Zustandsverwaltung unterscheidet sich von der Verwendung herkömmlicher globaler Variablen:

  1. Die Zustandsspeicherung von Vuex reagiert: Wenn Ihre Komponente den Vuex-Zustand verwendet, aktualisieren alle zugehörigen Komponenten automatisch die entsprechenden Daten, sobald sich dieser ändert, was Entwicklern viel Ärger erspart.
  2. Der Status von Vuex kann nicht direkt geändert werden: Wenn es sich um eine globale Objektvariable handelt, kann sie einfach geändert werden, dies ist jedoch in Vuex nicht möglich. Wenn Sie sie ändern möchten, müssen Sie die einzige von Vuex bereitgestellte Möglichkeit verwenden: explizit übermitteln (commint) Mutationen, um eine Modifikation zu erreichen. Dies hat den Vorteil, dass wir bequem jede Zustandsänderung nachverfolgen können, was beim Debuggen während des Entwicklungsprozesses sehr praktisch ist.

 3. Verwenden Sie Schritte

1. Installieren Sie Vuex

npm install vuex --save

2. Referenz-Vuex 

import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)

 3. Erstellen Sie ein Lagerhaus

Um Vuex zu verwenden, müssen wir eine Instanz erstellen  store, die wir Warehouse nennen, und dieses Warehouse verwenden,  store um unseren Zustand zu verwalten.

 //创建一个 store
 const store = new Vuex.Store({});

4. Enthält Module 

  • Status: definiert die Datenstruktur des Anwendungsstatus, in dem der standardmäßige Anfangsstatus festgelegt werden kann.
  • Getter: Ermöglicht Komponenten das Abrufen von Daten aus dem Speicher. Die Hilfsfunktion mapGetters ordnet die Getter im Speicher lediglich lokalen berechneten Eigenschaften zu.
  • Mutation: ist die einzige Möglichkeit, den Zustand im Speicher zu ändern, und muss eine synchrone Funktion sein.
  • Aktion: Es wird verwendet, um eine Mutation zu übermitteln, anstatt den Status direkt zu ändern, und kann jede asynchrone Operation enthalten.
  • Modul: Der Shop kann in Module unterteilt werden. Jedes Modul hat seinen eigenen Zustand, Mutation, Aktion, Getter und sogar verschachtelte Submodule


Die Funktion von Vuex ähnelt dem globalen Objekt. Vuex verwendet einen einzelnen Zustandsbaum und verwendet einen Objektzustand, um alle Zustände der gesamten Anwendungsebene zu enthalten. Sie können verstehen, dass diese Zustände eine Menge globaler Variablen und Daten sind.

  

1. Zustand

Angenommen, wir haben einen globalen Zustand  count mit einem Wert von 5. Dann können wir es als   die Summe  state im Objekt  definieren , als einen globalen Zustand, den wir verwenden können. folgendermaßen:keyvalue

 //创建一个 store
 const store = new Vuex.Store({
    //state存储应用层的状态
    state:{
        count:5  //总数:5
    }
 });

2. Getter

Es kann davon ausgegangen werden, dass Getter die berechneten Eigenschaften des Speichers sind, ähnlich wie berechnet, die eine gewisse Filterung, Transformation usw. an den Daten im Zustand durchführen

Angenommen, wir möchten einen neuen Zustand newCount basierend auf state.count ableiten, dann ist es geeignet, unsere Getter zu verwenden

Getter akzeptieren den Zustand als ihren ersten Parameter

const store = new Vuex.Store({
   //state存储应用层的状态
   state:{
      count:5  //总数:5
   },
   getters:{
      newCount:state => state.count * 3
   }
});

So erhalten Sie es in der Komponente  { {newCount}} :

export default {
  computed: {
      newCount(){
          return this.$store.getters.newCount;
      }
  }
};  

3. Mutationen

Die einzige Möglichkeit, wie Vuex uns das Ändern des Zustands im Lagerhaus ermöglicht, besteht darin, eine Mutation zu übermitteln, die eine synchrone Funktion sein muss

Wir haben eine Funktion namens increment in mutations definiert, und im Hauptteil der Funktion wollen wir Änderungen vornehmen

Akzeptiert den Status als ersten Parameter, und der zweite ist die benutzerdefinierte Parameterübergabe

 const store = new Vuex.Store({
    //state存储应用层的状态
    state:{
        count:5  //总数:5
    },
    // mutations是修改state中数据的唯一途径
    mutations:{
        increment(state,value){
            state.count += value;
        }
    }
 });

Wenn wir senden commit , ist der erste Parameter "increment"die Methode, die zu entspricht  mutations , incrementund der zweite Parameter ist der benutzerdefinierte Wert. Zum Beispiel:

 methods: {
   getVal(event) {
     //获取当前的按键的值
     let value = event.target.dataset.value;
     //通过commit提交一个名为increment的mutation
     this.$store.commit("increment", value);
   }
 }

So erhalten Sie es in der Komponente  { {count}} :

export default {
  computed: {
      count(){
          return this.$store.state.count;
      }
  }
};  

4. Aktion

  1. Wird für die Übermittlung verwendet  mutation, ohne den Status direkt zu ändern, kann beliebige asynchrone Vorgänge enthalten
  2. Nur durch  action=>mutations=>states diesen Prozess sind die spezifischen Schritte wie folgt:
    export default new Vuex.Store({
        //存放数据
        state: {
            obj: {},
        },
        //4. 通过commit mutations中的方法来处理
        mutations: {
            getParam(state, Object) {
                //5.修改state中的数据
                state.obj = Object
            }
        },
        //2.接受dispatch传递过来的方法和参数
        actions: {
            getParamSync(store, Object) {
                // 处理异步操作
                setTimeout(() => {
                    //3.通过commit提交一个名为getParam的mutation
                    //action 函数接收一个 store 的实例对象,因此你可以调用 store.commit 提交一个 mutation
                    store.commit('getParam', Object);
                }, 1000)
            }
        }
    })
    

    Dann können wir es in der Komponente so nennen

    methods: {
       getVal() {
    	  let name= 'xia';
    	  let age= '26';
    	  let sex= 'man';
    	  //1.通过dispatch将方法getParamSync和多个参数{name,age,sex}传递给actions
    	  this.$store.dispatch('getParamSync',{name,age,sex})
       }
    }
    

    5. Module

    Mit zunehmender Komplexität des Projekts wird es zur Vereinfachung der Verwaltung von Vuex im Allgemeinen in verschiedene Module ( Module) nach Funktionen für die zukünftige Verwaltung unterteilt. Jedes Modul hat seine eigenen  state, mutation,  und sogar verschachtelte Untermoduleactiongetter

    import Vue from 'vue'
    import Vuex from 'vuex'
    import state from './state'
    import mutations from './mutations'
    import actions from './actions'
    import * as getters from './getters'
    
    import moduleA from './module/moduleA' // 模块A
    import moduleB from './module/moduleB' // 模块B
    
    Vue.use(Vuex)
    
    export default new Vuex.Store({
        actions,
        getters,
        state,
        mutations,
        modules: {
            moduleA,
            moduleB
        }
    })
    

    moduleA.js /  moduleB.js Dokumente

    // 每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块
    export default {
        state: {
            text: 'moduleA'
        },
        getters: {},
        mutations: {},
        actions: {}
    }
    

    Dann können wir es in der Komponente so nennen

    <template>
    	<div class="demo">
    		<h1>{
         
         {getText1}}</h1>
    		<h1>{
         
         {getText2}}</h1>
    	</div>
    </template>
    
    computed: {
        getText1(){
        	return this.$store.state.moduleA.text;
        },
        //或
    	...mapState({
    		getText2: state => state.moduleB.text;
    	})
    }
    

    Daraus ist ersichtlich, dass der Zustand innerhalb des Moduls lokal ist und nur zum Modul selbst gehört, sodass nach außen über den entsprechenden Modulnamen zugegriffen werden muss.

  3. Fünf, das einfachste Projektbeispiel von Vuex

    Mit der Vuex-Syntax Zucker mapMutationsundmapGetters

    1. Daten speichern

    a.vue-Dokument

    import { mapMutations } from "vuex"; // 引入mapMutations
    export default {
    	methods: {
    		...mapMutations({
    		    // 将changeNews与mutations中的SET_NEWS关联
    		    changeNews: "SET_NEWS"
    		}),
    		submit(){
    			// 提交一个名为changeNews的mutation,并传入参数val
    			let val = 'test news';
    			this.changeNews(val);// 相当于this.$store.commit("changeNews", val);
    		}
    	}
    }
    

    2. Daten abrufen

    b.vue-Dokument

    import { mapGetters } from "vuex"; // 引入mapGetters 
    export default {
    	computed: {
            // 用vuex读取数据(读取的是getters.js中的数据)
            // 相当于this.$store.getters.news(vuex语法糖)
            ...mapGetters(["news"])
    	},
    	created() {
            // 获取getters中news数据
            console.log(this.news);
    	}
    }
    

    3. Dateiverzeichnisstruktur speichern

 index.js

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import mutations from './mutations'
import actions from './actions'
import * as getters from './getters'

//每次修改state都会在控制台打印log
import createLogger from 'vuex/dist/logger'

Vue.use(Vuex)

const debug = process.env.NODE_ENV !== 'production'

export default new Vuex.Store({
	actions,
	getters,
	state,
	mutations,
	strict: debug, // 当debug=true时开启严格模式(性能有损耗)
	plugins: debug ? [createLogger()] : []
})

state.js

const state = {
	news: {}
}

export default state;

mutationen.js

const mutations = {
	SET_NEWS(state, val) {
		state.news= val
	}
}

export default mutations;

Aktionen.js

//异步处理
const actions = {
    M_NEWS({ commit }, val) {
        commit('SET_NEWS', val);  // commit mutations修改
    }
}

export default actions;

getters.js

// 通常通过getters取数据 (this.$store.getters.news;)
export const news = state => state.news  // 不做其他处理 直接映射出去

4. Laden verwenden

main.js zitiert in 

import store from './store' //vuex存储文件

new Vue({
	el: '#app',
	router,
	store,
	components: {
		App
	},
	template: '<App/>'
})

6. Wird im Vue3-Setup verwendet

Im Vue2-Projekt können Sie verwenden,  this.$store um die Daten in vuex abzurufen und die globalen Daten zu speichern, aber in der Setup-Funktion von Vue3 gibt es kein  this solches Konzept, Sie können es  useStore stattdessen verwenden, die spezifische Verwendung ist wie folgt

//引入路由函数
import { useStore } from "vuex";

//使用
setup() {
    //使用vuex
    const store = useStore();
    
    //正常使用,相当于store代替了this.$store
    store.state	...
    
    return {};
}

おすすめ

転載: blog.csdn.net/weixin_48494427/article/details/126305667