Vue 使用vuex詳解

首先需要安裝vuex

npm install vuex --save

然后再src中件store 文件夾,并創(chuàng)建index.js文件

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
const store = new Vuex.Store();
 
export default store;

接下來(lái)再main.js中引入store,然后注入一下,之后就可以在任何一個(gè)組件中

import store from './store/index'
export const app=new Vue({
  router,
  store,
  render: h => h(App),
}).$mount('#app')

this.$store.state.data 。。獲取數(shù)據(jù),數(shù)據(jù)操作了
然后回到store/index.js 文件中 創(chuàng)建 state 變量

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
 const state={//要設(shè)置的全局訪問(wèn)的state對(duì)象
     showFooter: true,
     changableNum:0
     //要設(shè)置的初始屬性值
   };
 const store = new Vuex.Store({
       state
    });
 
export default store;

Vuex官方提供了api getters 和vue中的計(jì)算屬性compouted來(lái)實(shí)時(shí)監(jiān)聽(tīng)state的值

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
 const state={   //要設(shè)置的全局訪問(wèn)的state對(duì)象
     showFooter: true,
     changableNum:0
     //要設(shè)置的初始屬性值
   };
const getters = {   //實(shí)時(shí)監(jiān)聽(tīng)state值的變化(最新?tīng)顟B(tài))
    isShow(state) {  //方法名隨意,主要是來(lái)承載變化的showFooter的值
       return state.showFooter
    },
    getChangedNum(){  //方法名隨意,主要是用來(lái)承載變化的changableNum的值
       return state.changebleNum
    }
};
const store = new Vuex.Store({
       state,
       getters
});
export default store;

改變vuex中的數(shù)據(jù)就需要用到mutations,mutattions也是一個(gè)對(duì)象

import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
 const state={   //要設(shè)置的全局訪問(wèn)的state對(duì)象
     showFooter: true,
     changableNum:0
     //要設(shè)置的初始屬性值
   };
const getters = {   //實(shí)時(shí)監(jiān)聽(tīng)state值的變化(最新?tīng)顟B(tài))
    isShow(state) {  //承載變化的showFooter的值
       return state.showFooter
    },
    getChangedNum(){  //承載變化的changebleNum的值
       return state.changableNum
    }
};
const mutations = {
    show(state) {   //自定義改變state初始值的方法,這里面的參數(shù)除了state之外還可以再傳額外的參數(shù)(變量或?qū)ο?;
        state.showFooter = true;
    },
    hide(state) {  //同上
        state.showFooter = false;
    },
    newNum(state,sum){ //同上,這里面的參數(shù)除了state之外還傳了需要增加的值sum
       state.changableNum+=sum;
    }
};
 const store = new Vuex.Store({
       state,
       getters,
       mutations
});
export default store;

這時(shí)候你完全可以用 this.store.commit('show') 或 this.store.commit('hide') 以this.store.commit('newNum',6) 在別的組件里面進(jìn)行改變showfooter和changebleNum的值了,但是,因?yàn)関uex中的mutations 里面的方法是同步事務(wù),意思就是說(shuō):比如這里的一個(gè)this.store.commit('newNum',sum)方法,兩個(gè)組件里用執(zhí)行得到的值,每次都是一樣的。
官方api 還提供了actions,對(duì)象變量,最大的作用就是里面的Action方法 可以包含任意異步操作,這里面的方法是用來(lái)異步觸發(fā)mutations里面的方法,actions里面自定義的函數(shù)接收一個(gè)context參數(shù)和要變化的形參,context與store實(shí)例具有相同的方法和屬性,所以它可以執(zhí)行context.commit(' '),

 
import Vue from 'vue';
import Vuex from 'vuex';
Vue.use(Vuex);
 const state={   //要設(shè)置的全局訪問(wèn)的state對(duì)象
     showFooter: true,
     changableNum:0
     //要設(shè)置的初始屬性值
   };
const getters = {   //實(shí)時(shí)監(jiān)聽(tīng)state值的變化(最新?tīng)顟B(tài))
    isShow(state) {  //承載變化的showFooter的值
       return state.showFooter
    },
    getChangedNum(){  //承載變化的changebleNum的值
       return state.changableNum
    }
};
const mutations = {
    show(state) {   //自定義改變state初始值的方法,這里面的參數(shù)除了state之外還可以再傳額外的參數(shù)(變量或?qū)ο?;
        state.showFooter = true;
    },
    hide(state) {  //同上
        state.showFooter = false;
    },
    newNum(state,sum){ //同上,這里面的參數(shù)除了state之外還傳了需要增加的值sum
       state.changableNum+=sum;
    }
};
 const actions = {
    hideFooter(context) {  //自定義觸發(fā)mutations里函數(shù)的方法,context與store 實(shí)例具有相同方法和屬性
        context.commit('hide');
    },
    showFooter(context) {  //同上注釋
        context.commit('show');
    },
    getNewNum(context,num){   //同上注釋,num為要變化的形參
        context.commit('newNum',num)
     }
};
  const store = new Vuex.Store({
       state,
       getters,
       mutations,
       actions
});
export default store;

而在外部組件里進(jìn)行全局執(zhí)行actions里面方法的時(shí)候,你只需要用執(zhí)行

this.$store.dispatch('hideFooter')

或this.$store.dispatch('showFooter')

以及this.$store.dispatch('getNewNum',6) //6要變化的實(shí)參

原文鏈接:https://segmentfault.com/a/1190000015782272

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 安裝 npm npm install vuex --save 在一個(gè)模塊化的打包系統(tǒng)中,您必須顯式地通過(guò)Vue.u...
    蕭玄辭閱讀 3,035評(píng)論 0 7
  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類 // 創(chuàng)建一...
    蕓豆_6a86閱讀 783評(píng)論 0 3
  • ### store 1. Vue 組件中獲得 Vuex 狀態(tài) ```js //方式一 全局引入單例類 // 創(chuàng)建一...
    蕓豆_6a86閱讀 437評(píng)論 0 0
  • vuex 場(chǎng)景重現(xiàn):一個(gè)用戶在注冊(cè)頁(yè)面注冊(cè)了手機(jī)號(hào)碼,跳轉(zhuǎn)到登錄頁(yè)面也想拿到這個(gè)手機(jī)號(hào)碼,你可以通過(guò)vue的組件化...
    sunny519111閱讀 8,159評(píng)論 4 111
  • 上一章總結(jié)了 Vuex 的框架原理,這一章我們將從 Vuex 的入口文件開(kāi)始,分步驟閱讀和解析源碼。由于 Vuex...
    你的肖同學(xué)閱讀 1,885評(píng)論 3 16

友情鏈接更多精彩內(nèi)容