国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

詳解如何在vue-cli中使用vuex

2019-11-19 13:19:38
字體:
來源:轉載
供稿:網(wǎng)友

前言

眾所周知,vuex 是一個專為 vue.js 應用程序開發(fā)的狀態(tài)管理模式,在構建一個中大型單頁應用中使用vuex可以幫助我們更好地在組件外部管理狀態(tài)。而vue-cli是vue的官方腳手架,它能幫助我們方便的配置webpack。這樣看來,有很大的可能我們需要同時使用vue-cli與vuex

如何在vue-cli中使用vuex

項目搭建及添加vuex

當我們使用vue-cli搭建一個vue項目的時候(假設項目名為learn-vuex),搭建完成后的文件目錄是這樣子的

 

首先使用npm install --save-dev vuex 把vuex添加到依賴,接下來就是如何在組件中使用vuex,大體上來說有以下兩種形式。

通過 store 選項

如果vue-cli搭建成功,在src目錄下會有一個main.js文件,main.js的主要作用是把項目中最頂層的app.vue組件掛載到DOM中,其他所有的組件都可以看做是app.vue的子組件。

在main.js中,做如下操作

import Vue from 'vue'import App from './App'import router from './router'import Vuex from 'vuex'; Vue.config.productionTip = false//注意下面的代碼Vue.use(Vuex);const store = new Vuex.Store({ state: {}, getters: {}, actions: {}, mutations: {}});//注意router選項,此處的寫法等同于store: storenew Vue({ el: '#app', router, store, components: { App }, template: '<App/>'})

在組件中,就可以通過this.$store 來使用store實例

如果在項目中需要配置的vuex選項很多,我們則應該把vuex的相關代碼分割到不同模塊

在src下新建store文件夾,在文件夾中創(chuàng)建如下幾個文件

 

我們可以隨意設置文件名,但最好可以通過文件名就能判斷出這個文件是用來干嘛的

  1. index.js:整合各個模塊,創(chuàng)建并導出vuex實例
  2. rootState.js:配置vuex實例的state選項
  3. getters.js:getter選項
  4. mutations.js:mutations選項
  5. actions.js:actions選項

在index.js中,我們需要

import Vue from 'vue';import Vuex from 'vuex';import state from './rootState.js';import getters from './getters.js';import mutations from './mutations.js';import actions from './actions.js';Vue.use(Vuex);const store = new Vuex.Store({ state, getters, actions, mutations});export default store;

剩下的四個文件配置都差不多一樣,以rootState.js為例

const state = { count: 0, arr: [0,1,2,3,4,5]}export default state;

如此這般,在main.js中,我們需要編寫的代碼就減少了很多

import Vue from 'vue'import App from './App'import router from './router'import store from './store/index'; Vue.config.productionTip = falsenew Vue({ el: '#app', router, store, components: { App }, template: '<App/>'})

將vuex實例掛載到vue原型鏈上

這是一種非主流的方式,主要是受axios啟發(fā),這里有一篇博客講解如何在vue組件中使用axios,將axios掛載到vue原型鏈上是因為不能通過vue.use來使用axios

在這種方法中,我們需要

// The Vue build version to load with the `import` command// (runtime-only or standalone) has been set in webpack.base.conf with an alias.import Vue from 'vue'import App from './App'import router from './router'import store from './store/index'; Vue.config.productionTip = false//在vue中使用vuex必須先調用vue.use方法Vue.use(Vuex);//具體掛載到vue原型的哪個屬性上,可以由我們自行決定//遇到配置繁多的情況也可以進行分割Vue.prototype.$store = new Vuex.Store({ state: {}, getters: {}, actions: {}, mutations: {}});//沒有了store選項new Vue({ el: '#app', router, components: { App }, template: '<App/>'})

如此這般,還是可以通過this.$store 來使用vuex

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網(wǎng)。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 凉城县| 武山县| 腾冲县| 丽水市| 诏安县| 繁峙县| 临高县| 土默特右旗| 东阳市| 长垣县| 聂拉木县| 岱山县| 芜湖县| 休宁县| 兰溪市| 遂溪县| 堆龙德庆县| 贵州省| 宁阳县| 东台市| 东明县| 宁安市| 潞城市| 沐川县| 元氏县| 泗水县| 巴东县| 龙州县| 通道| 收藏| 安图县| 南安市| 肇东市| 德安县| 松原市| 延安市| 禹城市| 桃园县| 吴川市| 蓬溪县| 潞西市|