Vuex之store的使用


如果我們需要在不同路由中使用同一個會改變的參數,也就是需要一個全局參數,我們可以通過Vuex的store來實現。

實現方法:

1.在package.json中加入vuex,因為store是Vuex的一個功能。然后執行npm install。

"dependencies": {
  "element-ui": "^2.15.1", "less": "^4.1.1", "less-loader": "^8.1.1", "vue": "^2.5.2", "vue-router": "^3.0.1", "vuex": "3.3.0" }

2.在main.js導入store,並加入到Vue實例中。

import Vue from 'vue'
import App from './App'
import router from './router'
import store from './store'

Vue.config.productionTip = false

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

3.在src文件夾下新增store文件夾,里面包含index.js和modules/userId.js,modules文件夾下的文件為變量名。

4.編輯userId.js代碼如下,即定義一個全局狀態userId,定義其get和set方法。

其中,mutations是改變的意思,即改變狀態的值。

export default {
    state: {
        userId:{}
    },
    getters: {
        getUserId: state => state.userId
    },
    mutations: {
        setUserId(state, userId){
            state.userId = userId
        }
    }
}

5.編輯index.js代碼如下,即引入並使用Vuex,引入userId並在modules中配置。

import Vue from 'vue'
import Vuex from 'vuex'
import userId from './modules/userId'

Vue.use(Vuex)

export default new Vuex.Store({

    state: {
        //這里放全局參數
    },

    mutations: {
        //這里是set方法
    },

    getters: {        
        //這里是get方法   
    },

    actions: {
      
    },

    modules: {
        userId,
        //這里是為了給全局變量分組,所以需要寫提前聲明其他store文件,然后引入這里
    }
})

6.然后我們就可以在需要的地方存取變量了。

存變量的方法為

this.$store.commit('setUserId', 'luoyihao')

取變量的方法為

this.$store.getters.getUserId

7.我們也可以在新建Store(倉庫)時,將state、getters、actions、mutations等文件分別單獨寫成js,在store/index.js中引用。

如下圖所示。

//state.js
let state = {
  count: 1
}
export default state
//mutation.js
// 第一個參數默認接收state對象
let increment = (state) => {
  state.count++
}
let decrement = (state) => {
  state.count--
}
export {increment, decrement}

ps:Vuex和localStorage、全局變量的區別:

Vuex和localStorage的區別是什么呢?

1.最重要的區別:vuex存儲在內存,localStorage則以文件的方式存儲在本地

2.應用場景:vuex用於組件之間的傳值,localStorage則主要用於不同頁面之間的傳值。

3.永久性:當刷新頁面時vuex存儲的值會丟失,localStorage不會。

 

Vuex和全局變量的區別是什么呢?

1.由於使用Vuex需要將store實例掛載到Vue實例中,因此Vue實例可以對Vuex的state數據加監聽,這跟Vue實例data的數據雙向綁定是類似的。

而全局變量由於沒有被“數據劫持”,因此即使全局變量的值發生改變,也無法在Vue實例中監聽到他的變化。

2.Vuex中的狀態值,不能通過賦值的方式(state.xxx = yyy)改變,需要通過mutation觸發變更。這樣做方便狀態管理,而一般的全局變量是支持直接賦值的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM