vuex-6-module

简介: 1.拆分无止境,只是需要适合自己的项目2.接下来分析下 module的用法

1. 前言


1.拆分无止境,只是需要适合自己的项目

2.接下来分析下 module的用法


2. module


store问题

由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。

解决

为了解决以上问题,Vuex允许我们将store分割成模块(module)。每个模块拥有自己的state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:


3. 单独的 user模块


尤其要注意的是 这个namespaced:true,

设置命名空间,

因为之前的拆分,你并不能保证没有重名的,这个命名空间就可以保证不重名,原理就是访问变量的时候加了一层,后续会看到


export default{
    // 设置独立的命名空间,避免命名冲突
    namespaced:true,
    state:{
        userInfo:{}
    },
    mutations:{
        userInfoMutation(state,obj){
            state.userInfo = obj
        }
    },
    actions:{
        userInfoActions({commit},obj){
            commit("userInfoMutation",obj)
        }
    }
}



4. store


这2种拆分可以共存,这里都放这做个演示


import Vuex from 'vuex'
import state from  "./state"
import mutations from "./mutations"
import actions from "./actions"
import getters from "./getters"
import user from "./user"
Vue.use(Vuex)
export default new Vuex.Store({
  state,
  getters,
  mutations,
  actions,
  modules: {
    //user:user
     user
  }
})



5. 基础访问


访问的时候 比之前多了一层 user,所以不会重名

注意

1.这 userstore里面的 modules里面的保持一致


computed: {
    userInfo() {
      // 缺点就是访问的时候 比较麻烦
      return this.$store.state.user.userInfo;
    },
  },



6.基础修改


使用的时候 比之前多了一层 user,所以不会重名

注意

1.这 userstore里面的 modules里面的保持一致

2.一定要在模块里面开启命名空间namespaced:true,


test() {
      this.$store.commit("user/userInfoMutation", {
        test: "测试",
        name: "module写法",
      });
      console.log("store 模块写法:", this.$store.state.user);
    },

U6T{8CJ)~T2Y_B9IMAV{}4U.png



7.映射方法的使用 访问


就是辅助函数

解决访问的时候 过长的问题

user和和 store里面的 modules里面的保持一致

1.引入


import {mapState,mapMutations} from "vuex"


2. 计算属性


computed: {
    //   映射 state里面 user 的状态
      ...mapState('user',["userInfo"]),
    userInfo() {
      // 缺点就是访问的时候 比较麻烦
      return this.$store.state.user.userInfo;
    },
  },


3. 直接访问


console.log("store 模块写法:", this.userInfo);


4. 修改

2种写法 选一个即可


methods: {
      ...mapMutations('user',["userInfoMutation"]),
    test() {
    //   this.$store.commit("user/userInfoMutation", {
    //     test: "测试",
    //     name: "module写法",
    //   });
    this.userInfoMutation({test:"测试",name:"辅助函数"})
      console.log("store 模块写法:", this.userInfo);
    },



8.  getter辅助


和之前的写法一样,前面多个 命名空间就行


computed:{
  ...mapGetters("user",["vipList"],
}



9. 目录结构


}S%`]OJ(T0[`WY_SE~2)UDN.png




相关文章
Vuex模块module的详解
Vuex 模块是将 store 分割成多个模块的一种方式,每个模块都有自己的状态、mutations、actions 和 getters。这有助于更好地组织和管理应用程序的状态。
|
18天前
|
JavaScript
Vue状态管理:在Vuex中,什么是模块(module)?
Vue状态管理:在Vuex中,什么是模块(module)?
33 1
|
11月前
|
JavaScript 编译器
vue3+ts:shims-vue.d.ts
vue3+ts:shims-vue.d.ts
204 0
vue3+ts:shims-vue.d.ts
|
6月前
|
JavaScript
在vue中使用ts
在vue中使用ts
52 0
|
7月前
|
JavaScript 小程序 前端开发
详解module.exports与exports,export与export default,import 与require
详解module.exports与exports,export与export default,import 与require
37 0
|
9月前
|
Web App开发 Dart JavaScript
剖析require、import、export、exports、module.exports以及export default 的基本用法
剖析require、import、export、exports、module.exports以及export default 的基本用法
|
10月前
导出与导入(require,import,module.exports,exports,export,export default)
导出与导入(require,import,module.exports,exports,export,export default)
43 0
|
10月前
|
JavaScript C++
Module ‘“xx.vue“‘ has no default export.Vetur(1192)
Module ‘“xx.vue“‘ has no default export.Vetur(1192)
840 0
【vue2小知识】实现store中modules模块的封装与自动导入
store仓库中分模块时的需要每次导入index的问题
【vue2小知识】实现store中modules模块的封装与自动导入
|
JavaScript 前端开发 API
【ES6】Module模块详解
【ES6】Module模块详解
181 0

热门文章

最新文章