這篇文章將為大家詳細講解有關vuex與模塊化的示例分析,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
示例教程
例子是在vue-cli基礎上構建的,以下是src文件下的內容目錄。
├── App.vue ├── components // 組件文件夾 │ ├── tab1.vue │ ├── tab2.vue │ ├── tab3.vue │ └── tab4.vue ├── main.js // vue的主文件入口 ├── router // vue-router文件 │ └── index.js └── store // vuex文件 ├── action.js // action ├── getter.js // getter ├── index.js // vuex的主文件 ├── module // 模塊文件 │ ├── tab2.js │ └── tab3.js ├── mutation-type.js // mutation常量名文件 └── mutation.js // mutation
效果是這樣的(不要嫌棄簡陋啊啊?。?/p>

在這個例子里,把文檔里提到的vuex的相關知識都使用了一遍,包括模塊相關的知識,基本把一般的使用場景都覆蓋了吧。
那不廢話了,開始吧。
首先app.vue和router兩部分是和路由相關,就是很簡單的東西,看看文檔就能了解。
vuex的模塊化
在寫這個例子之前看了很多的開源項目的代碼,一開始蠻新鮮的,畢竟之前項目中并沒有深度使用過vuex,基本就是一個store.js里把vuex的功能就都完成了,但是項目復雜肯定不能這么寫,正好現在有這個需求,我就想寫個例子理一理這方面的思路。結果還是蠻簡單的。
store文件里的內容就是按照vuex五個核心概念建立的,這么做的好處對于梳理業務邏輯和后期維護都是極大的方便,比如mutation.js和mutation-type.js這兩個文件:
// mutation-type.js
const CHANGE_COUNT = 'CHANGE_COUNT';
export default {
CHANGE_COUNT
}// mutation.js
import type from './mutation-type'
let mutations = {
[type.CHANGE_COUNT](state) {
state.count++
}
}
export default mutations將mutation中的方法名單獨作為常量提取出來,放在單獨的文件中,用的時候引用相關的內容,這樣非常便于管理和了解有哪些方法存在,很直觀。另一方面,有時候可能需要用到action,可以使用相同的方法名,只要再引入常量的文件就行。
// action.js
import type from './mutation-type'
let actions = {
[type.CHANGE_COUNT]({ commit }) {
commit(type.CHANGE_COUNT)
}
}
export default actions怎么樣,這樣是不是看起來就沒有寫在一個文件里那么亂了。
...mapGetters和...mapActions
tab1.vue里:
// tab1.vue
<template>
<div>
<p>這是tab1的內容</p>
<em @click="add">{{count}}</em>
<p>getter:{{NewArr}}</p>
</div>
</template>
<script>
import { mapActions, mapGetters } from "vuex";
import type from "../store/mutation-type";
export default {
computed: {
...mapGetters([
'NewArr'
]),
count: function() {
return this.$store.state.count;
},
},
methods: {
...mapActions({
CHANGE_COUNT: type.CHANGE_COUNT
}),
add: function() {
this.CHANGE_COUNT(type.CHANGE_COUNT);
}
}
};
</script>
<style lang="" scoped>
</style>index.js文件里:
import Vuex from 'vuex'
import Vue from 'vue'
import actions from './action'
import mutations from './mutation'
import getters from './getter'
import tab2 from './module/tab2'
import tab3 from './module/tab3'
Vue.use(Vuex)
let state = {
count: 1,
arr:[]
}
let store = new Vuex.Store({
state,
getters,
mutations,
actions,
modules:{
tab2,tab3
}
})
export default storevuex提供了一種叫做輔助函數的東西,他的好處能讓你在一個頁面集中展示一些需要用到的東西,并且在使用的時候也可以少寫一些內容,不過這個不是必須,根據自己需要取用。
需要說明的是,他們兩個生效的地方可不一樣。
...mapGetters寫在本頁面的計算屬性中,之后就可以像使用計算屬性一樣使用getters里的內容了。
...mapActions寫在本頁面的methods里面,既可以在其他方法里調用,甚至可以直接寫在@click里面,像這樣:
<em @click="CHANGE_COUNT">{{count}}</em>醬紫,tab1里面的數字每次點擊都會自增1。
mudule
vuex的文檔里對于模塊這部分寫的比較模糊,還是得自己實際使用才能行。
在本例子中,我設置了兩個模塊:tab2和tab3,分別對應著同名的兩個組件,當然,我這樣只是為了測試,實際看tab2就可以。
// module/tab2.js
const tab2 = {
state: {
name:`這是tab2模塊的內容`
},
mutations:{
change2(state){
state.name = `我修改了tab2模塊的內容`
}
},
getters:{
name(state,getters,rootState){
console.log(rootState)
return state.name + ',使用getters修改'
}
}
}
export default tab2;// tab2.vue
<template>
<div>
<p>這是tab2的內容</p>
<strong @click="change">點擊使用muttion修改模塊tab2的內容:{{info}}</strong>
<h5>{{newInfo}}</h5>
</div>
</template>
<script>
export default {
mounted() {
// console.log(this.$store.commit('change2'))
},
computed: {
info: function() {
return this.$store.state.tab2.name;
},
newInfo(){
return this.$store.getters.name;
}
},
methods: {
change() {
this.$store.commit('change2')
}
}
};
</script>
<style lang="" scoped>
</style>這個例子里主要是看怎么在頁面中調用模塊中的stated等。
首先說state,這個很簡單,在頁面中這樣寫就行:
this.$store.steta.tab2(模塊名).name
在本頁面的mounted中console一下$store,可以看到模塊中,stete加了一層嵌套在state中的。
至于action,mutation,getter,和一般的使用方法一樣,沒有任何區別。
還有就是,在getter和action中,可以通過rootState獲得根結構的state,mutation中沒有此方法。
關于“vuex與模塊化的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。