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

首頁 > 編程 > JavaScript > 正文

詳解vuex之store拆分即多模塊狀態(tài)管理(modules)篇

2019-11-19 12:31:40
字體:
供稿:網(wǎng)友

了解vuex的朋友都知道它是vue用來集中管理狀態(tài)的容器,如果了解過Reduce的朋友可能看見他時就會非常熟悉,都是用來管理全局的狀態(tài)的,實現(xiàn)不同組件之間相互的數(shù)據(jù)訪問。這里我們不介紹vuex,主要介紹vuex拆分store以及多模塊管理。我們知道如果一個項目非常大的話狀態(tài)就會非常的多,如果不進(jìn)行分類處理,所有的狀態(tài)都維護(hù)在一個state里面的話,狀態(tài)管理就會變得非常的混亂,這樣非常不利于項目的后期維護(hù)。我們現(xiàn)在前端推崇模塊化開發(fā),為的就是提高開發(fā)效率和維護(hù)效率,避免重復(fù)工作。那么vuex是怎么樣解決這個問題的呢?這個時候我們今天要講的主角modules就要閃亮登場了。
其實這個用起來是非常簡單的,正常情況下,我們在用vuex的時候我們是這樣定義的:

states.js //保存應(yīng)用的狀態(tài)值

export default {  bookList:["西游記","水滸傳","紅樓夢","三國演義"]}

mutations.js //在這個文件中定義對狀態(tài)值的操作,增刪改查。

export default {//這里要注意不要在mutations里面進(jìn)行異步操作  ADD_BOOK(state,book){    state.bookList.push(book);    return true;  },  DELETE_BOOK(state,id){  }}

getters.js //將我們在states中定義的值暴露在store.getters對象中,便于我們在組件中可以通過store.getters對象中,便于我們在組件中可以通過store.getters.bookList訪問數(shù)據(jù)

export default {  bookList:function(state){    return state.bookList;  }} 

actions.js //其實這里定義的方法只是將mutation.js中定義的方法進(jìn)行了一次封裝,就是去觸發(fā)mutations.js中的方法。如果傳如的參數(shù)需要異步獲取的話,我們可以在這里等待異步返回成功后在觸發(fā)mutations中的方法。在組件中這兩個文件定義的方法都可以直接調(diào)用,mutations中定義的方法是通過store.dispath(′ADDBOOK′,book)調(diào)用的,而actons定義的方法是通過store.dispath(′ADDBOOK′,book)調(diào)用的,而actons定義的方法是通過store.commit(‘ADD_BOOK',book),調(diào)用的。

export default {//在action中可以進(jìn)行異步操作。  add_book({commit},book){   commit('ADD_BOOK',book);  },  delete_book({commit},book){   commit('DELETE_BOOK',id);  }}

這里有時我們還可能會看見一個文件叫mutations_type.js其實這個文件定義的是mutations中的方法名,我自己在用的時候反正沒定義這個文件,自己看著辦如果喜歡你就定義上。

上面定義的文件定義好了之后,我們就可以將我們定義的這些對象加入到vuex的Store中去了
store.js

import vue from 'vue'import vuex from 'vuex'import states from './state.js'import mutatons from './mutations.js'import actons from './actions.js'import getters from './getters'vue.use(vuex);export default new vuex.Store({          ststes,          mutatons,          getters,          actions         });

這樣我們就寫完整了一個store了。我們可以看出這里我們只有一個總模塊,那如果我們要將總模塊拆分成幾個小模塊,那應(yīng)該怎樣定義呢?

import vue from 'vue'import vuex from 'vuex'import states from './state.js'import mutatons from './mutations.js'import actons from './actions.js'import getters from './getters'vue.use(vuex);export default new vuex.Store({                modules:{                     mod1:{                        states,                        mutatons,                        getters,                        actions                        },                     mod2:{}                  }         }); 
import vue from 'vue'import vuex from 'vuex'import states from './state.js'import mutatons from './mutations.js'import actons from './actions.js'import getters from './getters'vue.use(vuex);export default new vuex.Store({                modules:{                    mod1:{states,                       mutatons,                       getters,                       actions                      },                    mod2:{}                  }         }); 

我自己在做項目的時候我一般將一個子模塊的state,mutations,actions,getter寫在一個文件中如:

mod1.js

 export default {  state:{},  mutatons:{},  actions:{},  getters:{}}

mod2.js

 export default {  state:{},  mutatons:{},  actions:{},  getters:{}}

然后在將幾個mod合并到store中去:

import vue from 'vue'import vuex from 'vuex'import mod1 from './mod1.js'import mod2 from './mod2.js'vue.use(vuex);export default new vuex.Store({                    modules:{                          mod1:mod1,                          mod2:mod1                  }         });

我感覺這樣寫的話代碼結(jié)構(gòu)更加直觀,清晰。而且正常的話一個子模塊一般不會有太多的狀態(tài)和方法。當(dāng)然如果項目中子模塊的狀態(tài)和方法確實太多,我們還是推薦將state,actions,getters,mutations單獨寫在不同的文件中,然后將不同的子模塊的這些文件放在一個文件夾中,這樣就代表一個子狀態(tài)管理模塊。

通過將總的store拆分過后,我們在狀態(tài)管理和維護(hù)的時候就更加清晰了。

在創(chuàng)建出store后,我們需要將store掛載到vue上去

import vue from 'vue'import store from './store'var vue = new Vue({ store, ???? }).$mount("#app")

之后在組建中就可以使用和管理前面定義的狀態(tài)了,

<template></template><script>  export default{       computed{              bookList:this.$store.mod1.bookList,       },       methods:{             addBook:book=>this.$store.mod1.commit('ADD_BOOK',book);//這里需要注意,如果你是用了子模塊的這種方法你需要加上模塊名這是mod1,如果沒有就不需要加。             deleteBook:id=>this.$store.mod1.disaptch('DELETE_BOOK',id);    }      }</script>

總結(jié):

將store進(jìn)行拆分,有利于我們更好的管理項目中的狀態(tài),以及使我們的項目維護(hù)更加加單高效。各個模塊之間的開發(fā)互相不影響。

好了,這次就簡單的介紹到這里,這次主要是介紹怎么用。并沒有深入到他的實現(xiàn)原理,對于vue的涉世未深的人來說,我感覺還是夠用了。

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 呼伦贝尔市| 泽州县| 高清| 白玉县| 龙岩市| 土默特左旗| 平和县| 青川县| 金华市| 华池县| 洛宁县| 平山县| 昌邑市| 广西| 沙洋县| 凤台县| 德安县| 宜丰县| 临夏市| 万源市| 吉林省| 礼泉县| 张家港市| 长子县| 金川县| 库尔勒市| 逊克县| 昭苏县| 南投市| 台安县| 仲巴县| 改则县| 灌南县| 静宁县| 镇远县| 福建省| 泰和县| 方正县| 黄梅县| 瑞安市| 武冈市|