¸üÐÂʱ¼ä:2023Äê07ÔÂ20ÈÕ10ʱ36·Ö À´Ô´:ÀÖÓãµç¾º ä¯ÀÀ´ÎÊý:

¡¡¡¡VuexÊÇÒ»¸öÓÃÓÚVue.jsÓ¦ÓóÌÐòµÄ״̬¹ÜÀíģʽ¿â¡£ËüÖ÷ÒªÓÃÓÚÔÚVue.jsÓ¦ÓóÌÐòÖйÜÀíºÍ¹²Ïí״̬(Êý¾Ý)µÄ¼¯ÖÐʽ´æ´¢¡£Í¨¹ýVuex£¬ÎÒÃÇ¿ÉÒÔÔÚ²»Í¬µÄ×é¼þÖ®¼ä¹²Ïí״̬£¬Ê¹µÃÓ¦ÓóÌÐòµÄ״̬¹ÜÀí¸ü¼Ó¼òµ¥ºÍ¿Éά»¤¡£
¡¡¡¡1.State(״̬)
¡¡¡¡´æ´¢Ó¦ÓóÌÐòµÄ״̬(Êý¾Ý)¡£
¡¡¡¡2.Getters(»ñÈ¡Æ÷)
¡¡¡¡ÀàËÆÓÚ¼ÆËãÊôÐÔ£¬ÓÃÓÚ´Ó״̬ÖÐÅÉÉú³öһЩ״̬£¬¹©×é¼þʹÓá£
¡¡¡¡3.Mutations(Í»±ä)
¡¡¡¡ÓÃÓÚ¸ü¸Ä״̬£¬Òò´ËËüÃÇÊÇÐÞ¸Ä״̬µÄΨһ;¾¶¡£Mutations±ØÐëÊÇͬ²½º¯Êý¡£
¡¡¡¡4.Actions(¶¯×÷)
¡¡¡¡ÓÃÓÚÌá½»Mutations£¬¿ÉÒÔ°üº¬ÈÎÒâÒì²½²Ù×÷¡£
¡¡¡¡5.Modules(Ä£¿é)
¡¡¡¡ÔÊÐí½«store²ð·ÖΪģ¿é£¬Ã¿¸öÄ£¿é¶¼ÓÐ×Ô¼ºµÄstate¡¢getters¡¢mutationsºÍactions¡£
¡¡¡¡1.°²×°Vuex£º
¡¡¡¡Ê×ÏÈ£¬ÔÚVue.jsÏîÄ¿Öа²×°Vuex¿â¡£ÎÒÃÇ¿ÉÒÔʹÓÃnpm»òyarn½øÐа²×°£º
npm install vuex # »ò yarn add vuex
¡¡¡¡2.´´½¨Vuex Store£º
¡¡¡¡ÔÚÏîÄ¿µÄÈë¿ÚÎļþ(ͨ³£ÊÇmain.js)ÖУ¬´´½¨Ò»¸öVuex storeʵÀý¡£ÔÚÕâ֮ǰ£¬ÐèÒªÎÒÃǵ¼ÈëVueºÍVuex£¬²¢Ê¹ÓÃVue.use()À´½«VuexÌí¼Óµ½VueʵÀýÖС£
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({
// ÔÚÕâÀﶨÒåÄúµÄ״̬£¨state£©¡¢»ñÈ¡Æ÷£¨getters£©¡¢Í»±ä£¨mutations£©ºÍ¶¯×÷£¨actions£©
});
new Vue({
// ...
store, // ½«Vuex storeʵÀýÌí¼Óµ½VueʵÀýÖÐ
// ...
}).$mount('#app');
¡¡¡¡3.¶¨ÒåState£º
¡¡¡¡ÔÚVuex storeÖУ¬¶¨ÒåÓ¦ÓóÌÐòµÄ״̬¡£
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store({
// ÔÚÕâÀﶨÒåÄúµÄ״̬£¨state£©¡¢»ñÈ¡Æ÷£¨getters£©¡¢Í»±ä£¨mutations£©ºÍ¶¯×÷£¨actions£©
});
new Vue({
// ...
store, // ½«Vuex storeʵÀýÌí¼Óµ½VueʵÀýÖÐ
// ...
}).$mount('#app');
¡¡¡¡4.¶¨ÒåGetters£º
¡¡¡¡¸ù¾ÝÐèÒª£¬¶¨Òå»ñÈ¡Æ÷À´ÅÉÉú¼ÆËã״̬¡£
const store = new Vuex.Store({
state: {
count: 0,
},
getters: {
doubleCount: (state) => state.count * 2, // ʾÀý»ñÈ¡Æ÷
// ¸ü¶àµÄ»ñÈ¡Æ÷...
},
});
¡¡¡¡5.¶¨ÒåMutations£º
¡¡¡¡¶¨ÒåÐÞ¸Ä״̬µÄÍ»±ä¡£
const store = new Vuex.Store({
state: {
count: 0,
},
mutations: {
increment(state) {
state.count++;
},
// ¸ü¶àµÄÍ»±ä...
},
});
¡¡¡¡6.¶¨ÒåActions£º
¡¡¡¡¶¨ÒåÌá½»MutationsµÄ¶¯×÷£¬¿ÉÒÔ°üº¬Òì²½²Ù×÷¡£
const store = new Vuex.Store({
state: {
count: 0,
},
mutations: {
increment(state) {
state.count++;
},
},
actions: {
asyncIncrement(context) {
setTimeout(() => {
context.commit('increment');
}, 1000);
},
// ¸ü¶àµÄ¶¯×÷...
},
});
¡¡¡¡7.ÔÚ×é¼þÖÐʹÓÃVuex£º
¡¡¡¡ÏÖÔÚ£¬ÎÒÃÇ¿ÉÒÔÔÚVue×é¼þÖÐʹÓÃVuexÀ´»ñȡ״̬¡¢ÅÉÉú¼ÆËã״̬¡¢Ìύͻ±äºÍÖ´Ðж¯×÷¡£
<template>
<div>
<p>Count: {{ count }}</p>
<p>Double Count: {{ doubleCount }}</p>
<button @click="incrementCount">Increment</button>
<button @click="asyncIncrementCount">Async Increment</button>
</div>
</template>
<script>
export default {
computed: {
count() {
return this.$store.state.count;
},
doubleCount() {
return this.$store.getters.doubleCount;
},
},
methods: {
incrementCount() {
this.$store.commit('increment');
},
asyncIncrementCount() {
this.$store.dispatch('asyncIncrement');
},
},
};
</script>
¡¡¡¡ÒÔÉÏÊÇʹÓÃVuexµÄ»ù±¾²½Ö裬µ±ÎÒÃǵÄÓ¦ÓóÌÐòÐèÒª¹ÜÀí¸ü¸´ÔÓµÄ״̬ʱ£¬¿ÉÒÔ½øÒ»²½À©Õ¹Vuex storeÒÔÂú×ãÎÒÃǵÄÐèÇó¡£
±±¾©Ð£Çø