欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Vuex為什么需要模塊化

這篇文章主要介紹Vuex為什么需要模塊化,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

做網(wǎng)站、成都網(wǎng)站建設(shè)中從網(wǎng)站色彩、結(jié)構(gòu)布局、欄目設(shè)置、關(guān)鍵詞群組等細(xì)微處著手,突出企業(yè)的產(chǎn)品/服務(wù)/品牌,幫助企業(yè)鎖定精準(zhǔn)用戶,提高在線咨詢和轉(zhuǎn)化,使成都網(wǎng)站營銷成為有效果、有回報(bào)的無錫營銷推廣。創(chuàng)新互聯(lián)專業(yè)成都網(wǎng)站建設(shè)十余年了,客戶滿意度97.8%,歡迎成都創(chuàng)新互聯(lián)客戶聯(lián)系。

一、為什么需要模塊化

前面我們講到的例子都在一個(gè)狀態(tài)樹里進(jìn)行,當(dāng)一個(gè)項(xiàng)目比較大時(shí),所有的狀態(tài)都集中在一起會得到一個(gè)比較大的對象,進(jìn)而顯得臃腫,難以維護(hù)。為了解決這個(gè)問題,Vuex允許我們將store分割成模塊(module),每個(gè)module有自己的state,mutation,action,getter,甚至還可以往下嵌套模塊,下面我們看一個(gè)典型的模塊化例子

const moduleA = {
 state: {....},
 mutations: {....},
 actions: {....},
 getters: {....}
}

const moduleB = {
 state: {....},
 mutations: {....},
 actions: {....},
 getters: {....}
}

const store = new Vuex.Store({
 modules: {
 a: moduleA,
 b: moduleB
 }
})

store.state.a // moduleA的狀態(tài)
store.state.b // moduleB的狀態(tài)

二、模塊的局部狀態(tài)

模塊內(nèi)部的mutation和getter,接收的第一參數(shù)(state)是模塊的局部狀態(tài)對象,rootState

const moduleA = {
 state: { count: 0},
 mutations: {
 increment (state) {
  // state是模塊的局部狀態(tài),也就是上面的state
  state.count++
 }
 },
 getters: {
 doubleCount (state, getters, rootState) {
  // 參數(shù) state為當(dāng)前局部狀態(tài),rootState為根節(jié)點(diǎn)狀態(tài)
  return state.count * 2
 }
 },
 actions: {
 incremtnIfOddRootSum ( { state, commit, rootState } ) {
  // 參數(shù) state為當(dāng)前局部狀態(tài),rootState為根節(jié)點(diǎn)狀態(tài)
  if ((state.cont + rootState.count) % 2 === 1) {
  commit('increment')
  }
 }
 }
}

三、命名空間(這里一定要看,不然有些時(shí)候會被坑)

上面所有的例子中,模塊內(nèi)部的action、mutation、getter是注冊在全局命名空間的,如果你在moduleA和moduleB里分別聲明了命名相同的action或者mutation或者getter(叫some),當(dāng)你使用store.commit('some'),A和B模塊會同時(shí)響應(yīng)。所以,如果你希望你的模塊更加自包含和提高可重用性,你可以添加namespaced: true的方式,使其成為命名空間模塊。當(dāng)模塊被注冊后,它的所有g(shù)etter,action,mutation都會自動根據(jù)模塊注冊的路徑調(diào)用整個(gè)命名,例如:

const store = new Vuex.Store({
 modules: {
 account: {
  namespaced: true,
  state: {...}, // 模塊內(nèi)的狀態(tài)已經(jīng)是嵌套的,namespaced不會有影響
  getters: {  // 每一條注釋為調(diào)用方法
  isAdmin () { ... } // getters['account/isAdmin']
  },
  actions: {
  login () {...} // dispatch('account/login')
  },
  mutations: {
  login () {...} // commit('account/login')
  },
  modules: {  // 繼承父模塊的命名空間
  myPage : {
   state: {...},
   getters: {
   profile () {...}  // getters['account/profile']
   }
  },
  posts: { // 進(jìn)一步嵌套命名空間
   namespaced: true,
   getters: {
   popular () {...} // getters['account/posts/popular']
   }
  }
  }
 }
 }
})

啟用了命名空間的getter和action會收到局部化的getter,dispatch和commit。你在使用模塊內(nèi)容時(shí)不需要再同一模塊內(nèi)添加空間名前綴,更改namespaced屬性后不需要修改模塊內(nèi)的代碼。

四、在命名空間模塊內(nèi)訪問全局內(nèi)容(Global Assets)

如果你希望使用全局state和getter,roorState和rootGetter會作為第三和第四參數(shù)傳入getter,也會通過context對象的屬性傳入action若需要在全局命名空間內(nèi)分發(fā)action或者提交mutation,將{ root: true }作為第三參數(shù)傳給dispatch或commit即可。

modules: {
 foo: {
 namespaced: true,
 getters: {
  // 在這個(gè)被命名的模塊里,getters被局部化了
  // 你可以使用getter的第四個(gè)參數(shù)來調(diào)用 'rootGetters'
  someGetter (state, getters, rootSate, rootGetters) {
  getters.someOtherGetter // -> 局部的getter, ‘foo/someOtherGetter'
  rootGetters.someOtherGetter // -> 全局getter, 'someOtherGetter'
  }
 },
 actions: {
  // 在這個(gè)模塊里,dispatch和commit也被局部化了
  // 他們可以接受root屬性以訪問跟dispatch和commit
  smoeActino ({dispatch, commit, getters, rootGetters }) {
  getters.someGetter // 'foo/someGetter'
  rootGetters.someGetter // 'someGetter'
  dispatch('someOtherAction')  // 'foo/someOtherAction'
  dispatch('someOtherAction', null, {root: true}) // => ‘someOtherAction'
  commit('someMutation') // 'foo/someMutation'
  commit('someMutation', null, { root: true }) // someMutation
  }
 }
 }
}

五、帶命名空間的綁定函數(shù)

前面說過,帶了命名空間后,調(diào)用時(shí)必須要寫上命名空間,但是這樣就比較繁瑣,尤其涉及到多層嵌套時(shí)(當(dāng)然開發(fā)中別嵌套太多,會暈。。)

下面我們看下一般寫法

computed: {
 ...mapState({
 a: state => state.some.nested.module.a,
 b: state => state.some.nested.module.b
 }),
 methods: {
 ...mapActions([
  'some/nested/module/foo',
  'some/nested/module/bar'
 ])
 }
}

對于這種情況,你可以將模塊的命名空間作為第一個(gè)參數(shù)傳遞給上述函數(shù),這樣所有的綁定會自動將該模塊作為上下文。簡化寫就是

computed: {
 ...mapStates('some/nested/module', {
 a: state => state.a,
 b: state => state.b
 })
},
methods: {
 ...mapActions('some/nested/module',[
 'foo',
 'bar'
 ])
}

六、模塊重用

有時(shí)我們可能創(chuàng)建一個(gè)模塊的多個(gè)實(shí)例,例如:

  • 創(chuàng)建多個(gè)store,他們共用一個(gè)模塊

  • 在一個(gè)store中多次注冊同一個(gè)模塊

如果我們使用一個(gè)純對象來聲明模塊的狀態(tài),那么這個(gè)狀態(tài)對象會通過引用被共享,導(dǎo)致數(shù)據(jù)互相污染。
實(shí)際上Vue組件內(nèi)data是同樣的問題,因此解決辦法也是一樣的,使用一個(gè)函數(shù)來聲明模塊狀態(tài)(2.3.0+支持)

const MyModule = {
 state () {
 return {
  foo: 'far'
 }
 }
}

以上是“Vuex為什么需要模塊化”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

當(dāng)前名稱:Vuex為什么需要模塊化
標(biāo)題鏈接:http://aaarwkj.com/article10/jjhsgo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供服務(wù)器托管、響應(yīng)式網(wǎng)站、面包屑導(dǎo)航、外貿(mào)建站、網(wǎng)站內(nèi)鏈、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司
久久av免费一区二区观看| 夫妻性生活视频在线免费看| 国产在线麻豆在拍91精品| 国产69精品久久一级| 国产免费观看久久黄av片涩av| 欧美一区二区三区成人网| 国产亚洲精品麻豆一区二区| 久久久久久久精品久久| 欧美一区二区久久综合| 亚洲av一区二区在线看| 国产精品熟女在线视频| 亚洲国产成人av精品精品国产自| 伊人久久大香线蕉av色婷婷色| 久久精品一区二区东京热| 97精品少妇一区二区三区| 久久综合久中文字幕青草| 91白丝视频在线观看| 给我免费在线观看视频| 国产裸体无遮挡免费精品| av影片天堂在线观看| 国家成人午夜在线观看| 老熟女露脸吞精一二三四区| 亚洲第一狼人天堂在线| 九九蜜桃视频香蕉视频| 色哟国产传媒视频在线观看| 日韩精品电影一区在线观看| 观看女性真实高潮的合集| 一本之道久久成人综合| 欧美日韩另类激情免费| 亚洲精品一级理论片对面| 亚洲av在线视频免费播放| 亚洲一区二区三区伊人| 欧美大吊视频在线观看| av天堂午夜精品蜜臀| 西西美女掰开阴让你看| 亚洲成人高清在线播放| 不卡的av中文字幕在线播放| 91无人区一区二区三乱码| 国产三级黄在线观看| 国产传媒在线观看网站| 亚洲中文字幕高清乱码毛片|