日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > vue >内容正文

vue

Vuex State模块化

發布時間:2023/12/31 vue 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Vuex State模块化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當應用非常復雜的時候,store對象就會變得非常臃腫。
為了解決上面的問題,我們將store分成模塊
文件目錄如下
方案一:

方案二:

狀態管理中 state 就相當于 vue中 data屬性, getters就相當于vue中的computed屬性, mutations,
actions就相當于vue中的方法

getter

gettetr被認為 是計算屬性 返回值會作為依賴緩存起來 只有當依賴發生變化時才會重新計算

mutation

action

模塊化

import Vue from "vue" import Vuex from "vuex" import footerStatus from './modules/footerStatus' import collection from './modules/collection'Vue.use(Vuex)export default new Vuex.Store({modules: { // 這里聲明兩個模塊,后面使用就知道為啥要這樣搞了collection,footerStatus} })

1.模塊化以后,state的獲取務必要加上一個模塊名,才能獲取到模塊里面的對象

eg: this.$store.state.moduleA.name

2.在輔助函數中我們同樣需要這樣做

...mapState({name:state => state.moduleA.name })

3.命名空間
一旦去做了模塊化處理,這樣一定會產生命名沖突。
所以我們利用了namespace:true來避免命名沖突
當模塊被注冊之后
模塊里面的state action mutation會自動根據 模塊名自動調整命名

export default moduleA {namespace:true,state,action,mutation}

同樣vuex的開發者考慮到,我們每次都要寫模塊名很麻煩,所以在輔助函數中給我們提供了一個參數位置來綁定命名空間

...mapstate('moduleA',{name:state=>state.name })

const board = {//數據當前的狀態state:{boardDataset:[]}, //get獲取狀態 類似于computedgetters:{getBoardDataset(state){return state.boardDataset}}, //同步更新狀態actions:{changeBoardDataset(state , item){state.boardDataset.push(item)}}, //異步更新狀態mutations:{asynChangeBoardDataset(context,item){context.commit('changeBoardDataset',item)}} }//導出模塊 export default board;

在需要的組件中我們通過輔助函數進行引用:

...mapState({boardDatasets:state=>state.board.boardDataset})

總結

以上是生活随笔為你收集整理的Vuex State模块化的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。