深入理解Vuex 模块化(module) Vuex 模块化是指将Vuex Store分割成多个模块,每个模块拥有自己的状态、mutation、action、getter等,通过这种方式可以更好地组织和维护项目中的状态树。下面是对Vuex 模块化的详细介绍: 一、为什么需要模块化? 在大型项目中,如果所有的状态都集中在一起,会得到一个比较大的对象,进而显得臃肿,难以维护。因此,Vuex允许我们将store分割成模块,每个模块有自己的状态、mutation、action、getter等,通过这种方式可以更好地组织和维护项目中的状态树。 二、模块的局部状态 在模块内部,mutation和getter接收的第一参数(state)是模块的局部状态对象,而不是rootState。在模块内部,可以使用局部状态对象来访问和修改状态。例如: const moduleA = { state: { count: 0}, mutations: { increment (state) { state.count++ } }, getters: { doubleCount (state, getters, rootState) { return state.count * 2 } }, actions: { incremtnIfOddRootSum ({ state, commit, rootState }) { if ((state.count + rootState.count) % 2 === 1) { commit('increment') } } } } 三、命名空间 在模块内部,action、mutation、getter是注册在全局命名空间的。如果你在moduleA和moduleB里分别声明了命名相同的action或者mutation或者getter, 当你使用store.commit('some'),A和B模块会同时响应。为了解决这个问题,可以添加namespaced: true的方式,使其成为命名空间模块。 例如: const store = new Vuex.Store({ modules: { account: { namespaced: true, state: {...}, getters: { isAdmin () {...} // getters['account/isAdmin'] }, actions: { login () {...} // dispatch('account/login') }, mutations: { login () {...} // commit('account/login') }, modules: { myPage : { state: {...}, getters: { profile () {...} // getters['account/profile'] } }, posts: { namespaced: true, getters: { popular () {...} // getters['account/posts/popular'] } } } } } }) 通过这种方式,可以使模块更加自包含和提高可重用性,同时也可以避免命名冲突的问题。
- 粉丝: 2
- 资源: 937
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 国开-网络安全技术-实验一 搭建网络安全演练环境.doc
- 国开-网络安全技术-实验八 SQL注入工具使用.doc
- 用python写的一些小工具
- 国开-微积分基础-微积分基础下载作业word版.doc
- 国开-微积分基础-大作业word版.docx
- 排序算法 Sorting 查找算法
- HTML5实现好看的艺术设计师作品展示模板.zip
- HTML5实现好看的音乐乐队演出票务网站模板.zip
- HTML5实现好看的营销推广公司网站模板.zip
- HTML5实现好看的音频播客个人主页模板.zip
- HTML5实现好看的婴儿护理中心网站模板.zip
- HTML5实现好看的应用程序设计网站模板.zip
- HTML5实现好看的游戏碟片厂商官网模板.zip
- HTML5实现好看的游轮帆船租赁网站模板.zip
- HTML5实现好看的瑜伽培训运动网站模板.zip
- HTML5实现好看的游艇租赁服务公司网站模板.zip