47 - vuex - 分模块

一. 核心概念 - 模块 module(进阶语法)

目标:掌握核心概念 module 模块的创建

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

store 对象就有可能变得相当臃肿。(当项目变得越来越大的时候,Vuex会变得越来越难以维护)

1. 模块拆分: 

        (1). 创建子模块

        (2). 主模块引入子模块

        (3). 浏览器vue调试工具中的vuex栏可以看到下面多一个子模块

2. 代码示例 

        (1). 定义子模块

        (2). 主模块引用子模块

        (3). 浏览器调试

二. 访问模块中的 state 

目标:掌握模块中state 的访问语法

尽管已经分模块了,但其实子模块的状态,还是会挂到根级别的 state 中,属性名就是模块名

1. 使用模块中的数据:

         (1). 直接通过模块名访问 $store.state.模块名.xxx  

         (2). 通过 mapState 映射                

                默认根级别的映射 mapState([xxx'])

                子模块的映射 mapState('模块名',[xxx]) - 需要开启命名空间

// 子模块导出时,开启命名空间
export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
}
2. 代码示例

        (1). 通过主模块获取

        (2). 通过主模块 & 辅助函数获取

        (3). 使用子模块命名空间 & 辅助函数获取

三. 访问模块中的 getters 

目标:掌握模块中getters 的访问语法

1. 使用模块中 getters 中的数据:

        (1). 直接通过模块名访问 $store.getters['模块名/xxx']

        (2). 通过 mapGetters 映射

                默认根级别的映射 mapGetters(['xxx'])

                子模块的映射 mapGetters('模块名', ['xxx']) - 需要开启命名空间

export default {
  namespaced: true, // 开启命名空间
  state,
  mutations,
  actions,
  getters
}
2. 代码示例

        (1). 通过主模块原生获取

        (2). 通过命名空间 & 辅助函数获取 

四. 访问模块中的 mutations

目标: 掌握模块中 mutation 的调用语法 

注意:默认模块中的 mutation 和 actions 会被挂载到全局,需要开启命名空间,才会挂载到子模块。

1. 调用子模块中 mutayion

        (1).  直接通过 store 调用 $store.commit('模块名/xxx',额外参数)        

        (2). 通过 mapMutations 映射
                默认根级别的映射 mapMutations(['xxx'])

                子模块的映射 mapMutations('模块名',['xxx']) - 需要开启命名空间

export default {
  namespaced: true, // 开启命名空间
  state,
  mutations,
  actions,
  getters
}
 2. 代码示例

        (1). 原生方法修改子模块的mutation

        (2). 通过命名空间 & 辅助函数获取 

五. 访问模块中的 action

目标: 掌握模块中action 的调用语法(同理- 直接类比 mutation 即可)

注意:默认模块中的 mutation 和 actions 会被挂载到全局,需要开启命名空间,才会挂载到子模块

1. 调用子模块中 action:

        (1). 直接通过 store 调用 $store.dispatch('模块名/xxx' , 额外参数)

        (2).  通过 mapActions 映射                

                默认根级别的映射 mapActions(['xxx'])

                子模块的映射 mapActions('模块名', ['xxx']) - 需要开启命名空间

export default {
  namespaced: true, // 开启命名空间
  state,
  mutations,
  actions,
  getters
}
2. 代码示例 

        (1). 原生方法调用子模块的action

        (2). 通过命名空间 & 辅助函数获取

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
npm ERR! code ERESOLVE npm ERR! ERESOLVE could not resolve npm ERR! npm ERR! While resolving: @vue/cli-plugin-vuex@4.4.6 npm ERR! Found: @vue/cli-service@5.0.8 npm ERR! node_modules/@vue/cli-service npm ERR! dev @vue/cli-service@"^5.0.8" from the root project npm ERR! peer @vue/cli-service@"^3.0.0 || ^4.0.0 || ^5.0.0-0" from @vue/cli-plugin-babel@5.0.8 npm ERR! node_modules/@vue/cli-plugin-babel npm ERR! dev @vue/cli-plugin-babel@"^5.0.8" from the root project npm ERR! 3 more (@vue/cli-plugin-pwa, @vue/cli-plugin-router, @vue/cli-plugin-vuex) npm ERR! npm ERR! Could not resolve dependency: npm ERR! peer @vue/cli-service@"^3.0.0 || ^4.0.0-0" from @vue/cli-plugin-vuex@4.4.6 npm ERR! node_modules/@vue/cli-plugin-vuex npm ERR! dev @vue/cli-plugin-vuex@"~4.4.0" from the root project npm ERR! npm ERR! Conflicting peer dependency: @vue/cli-service@4.5.19 npm ERR! node_modules/@vue/cli-service npm ERR! peer @vue/cli-service@"^3.0.0 || ^4.0.0-0" from @vue/cli-plugin-vuex@4.4.6 npm ERR! node_modules/@vue/cli-plugin-vuex npm ERR! dev @vue/cli-plugin-vuex@"~4.4.0" from the root project npm ERR! npm ERR! Fix the upstream dependency conflict, or retry npm ERR! this command with --force or --legacy-peer-deps npm ERR! to accept an incorrect (and potentially broken) dependency resolution. npm ERR! npm ERR! npm ERR! For a full report see: npm ERR! C:\Users\35514\AppData\Local\npm-cache\_logs\2023-06-08T07_30_06_817Z-eresolve-report.txt npm ERR! A complete log of this run can be found in: npm ERR! C:\Users\35514\AppData\Local\npm-cache\_logs\2023-06-08T07_30_06_817Z-debug-0.log
06-09

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值