中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是store拆分即多模塊狀態管理modules

發布時間:2021-09-10 18:37:12 來源:億速云 閱讀:130 作者:柒染 欄目:web開發

什么是store拆分即多模塊狀態管理modules,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。

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

states.js //保存應用的狀態值

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

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

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

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

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

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

export default {//在action中可以進行異步操作。
  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了。我們可以看出這里我們只有一個總模塊,那如果我們要將總模塊拆分成幾個小模塊,那應該怎樣定義呢?

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
                  }
         });

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

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

在創建出store后,我們需要將store掛載到vue上去

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

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

<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>

總結:

將store進行拆分,有利于我們更好的管理項目中的狀態,以及使我們的項目維護更加加單高效。各個模塊之間的開發互相不影響。

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

看完上述內容,你們掌握什么是store拆分即多模塊狀態管理modules的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乡城县| 邛崃市| 台江县| 吐鲁番市| 惠水县| 册亨县| 西华县| 商河县| 南宫市| 东方市| 永春县| 新河县| 象山县| 湘潭市| 正宁县| 伊吾县| 天气| 武邑县| 宁阳县| 繁昌县| 安远县| 潜江市| 武义县| 如皋市| 房山区| 灵寿县| 华蓥市| 开封市| 三河市| 开鲁县| 武隆县| 兰溪市| 岚皋县| 长泰县| 高雄市| 新干县| 东兰县| 广平县| 闽侯县| 宜君县| 嘉义市|