了解vuex的朋友都知道它是vue用来集中管理状态的容器,如果了解过Reduce的朋友可能看见他时就会非常熟悉,都是用来管理全局的状态的,实现不同组件之间相互的数据访问。这里我们不介绍vuex,主要介绍vuex拆分store以及多模块管理。我们知道如果一个项目非常大的话状态就会非常的多,如果不进行分类处理,所有的状态都维护在一个state里面的话,状态管理就会变得非常的混乱,这样非常不利于项目的后期维护。我们现在前端推崇模块化开发,为的就是提高开发效率和维护效率,避免重复工作。那么vuex是怎么样解决这个问题的呢?这个时候我们今天要讲的主角modules就要闪亮登场了。
其实这个用起来是非常简单的,正常情况下,我们在用vuex的时候我们是这样定义的:
states.js //保存应用的状态值
export default { bookList:["西游记","水浒传","红楼梦","三国演义"] }
mutations.js //在这个文件中定义对状态值的操作,增删改查。
export default {//这里要注意不要在mutations里面进行异步操作 ADD_BOOK(state,book){ state.bookList.push(book); return true; }, DELETE_BOOK(state,id){ } }
getters.js //将我们在states中定义的值暴露在store.getters对象中,便于我们在组件中可以通过store.getters对象中,便于我们在组件中可以通过store.getters.bookList访问数据
export default { bookList:function(state){ return state.bookList; } }
actions.js //其实这里定义的方法只是将mutation.js中定义的方法进行了一次封装,就是去触发mutations.js中的方法。如果传如的参数需要异步获取的话,我们可以在这里等待异步返回成功后在触发mutations中的方法。在组件中这两个文件定义的方法都可以直接调用,mutations中定义的方法是通过store.dispath(′ADDBOOK′,book)调用的,而actons定义的方法是通过store.dispath(′ADDBOOK′,book)调用的,而actons定义的方法是通过store.commit(‘ADD_BOOK',book),调用的。
export default {//在action中可以进行异步操作。 add_book({commit},book){ commit('ADD_BOOK',book); }, delete_book({commit},book){ commit('DELETE_BOOK',id); } }
这里有时我们还可能会看见一个文件叫mutations_type.js其实这个文件定义的是mutations中的方法名,我自己在用的时候反正没定义这个文件,自己看着办如果喜欢你就定义上。
上面定义的文件定义好了之后,我们就可以将我们定义的这些对象加入到vuex的Store中去了
store.js
import vue from 'vue' import vuex from 'vuex' import states from './state.js' import mutatons from './mutations.js' import actons from './actions.js' import getters from './getters' vue.use(vuex); export default new vuex.Store({ ststes, mutatons, getters, actions });
这样我们就写完整了一个store了。我们可以看出这里我们只有一个总模块,那如果我们要将总模块拆分成几个小模块,那应该怎样定义呢?
import vue from 'vue' import vuex from 'vuex' import states from './state.js' import mutatons from './mutations.js' import actons from './actions.js' import getters from './getters' vue.use(vuex); export default new vuex.Store({ modules:{ mod1:{ states, mutatons, getters, actions }, mod2:{} } });
import vue from 'vue' import vuex from 'vuex' import states from './state.js' import mutatons from './mutations.js' import actons from './actions.js' import getters from './getters' vue.use(vuex); export default new vuex.Store({ modules:{ mod1:{states, mutatons, getters, actions }, mod2:{} } });
我自己在做项目的时候我一般将一个子模块的state,mutations,actions,getter写在一个文件中如:
mod1.js
export default { state:{}, mutatons:{}, actions:{}, getters:{} }
mod2.js
export default { state:{}, mutatons:{}, actions:{}, getters:{} }
然后在将几个mod合并到store中去:
import vue from 'vue' import vuex from 'vuex' import mod1 from './mod1.js' import mod2 from './mod2.js' vue.use(vuex); export default new vuex.Store({ modules:{ mod1:mod1, mod2:mod1 } });
我感觉这样写的话代码结构更加直观,清晰。而且正常的话一个子模块一般不会有太多的状态和方法。当然如果项目中子模块的状态和方法确实太多,我们还是推荐将state,actions,getters,mutations单独写在不同的文件中,然后将不同的子模块的这些文件放在一个文件夹中,这样就代表一个子状态管理模块。
通过将总的store拆分过后,我们在状态管理和维护的时候就更加清晰了。
在创建出store后,我们需要将store挂载到vue上去
import vue from 'vue' import store from './store' var vue = new Vue({ store, ···· }).$mount("#app")
之后在组建中就可以使用和管理前面定义的状态了,
<template> </template> <script> export default{ computed{ bookList:this.$store.mod1.bookList, }, methods:{ addBook:book=>this.$store.mod1.commit('ADD_BOOK',book);//这里需要注意,如果你是用了子模块的这种方法你需要加上模块名这是mod1,如果没有就不需要加。 deleteBook:id=>this.$store.mod1.disaptch('DELETE_BOOK',id); } } </script>
总结:
将store进行拆分,有利于我们更好的管理项目中的状态,以及使我们的项目维护更加加单高效。各个模块之间的开发互相不影响。
好了,这次就简单的介绍到这里,这次主要是介绍怎么用。并没有深入到他的实现原理,对于vue的涉世未深的人来说,我感觉还是够用了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍详解Vuex下Store的模块化拆分实践,包括了详解Vuex下Store的模块化拆分实践的使用技巧和注意事项,需要的朋友参考一下 前言 最近的项目用到了 vue.js + vuex + vue-router 全家桶,版本为 >2.0,在搞Store的时候发现,圈子里大部分关于vuex的文章都是比较基础的Demo搭建方式,很少有涉及到比较复杂的模块化拆分的Store实践,而且事实上也有
本文向大家介绍vue store之状态管理模式的详细介绍,包括了vue store之状态管理模式的详细介绍的使用技巧和注意事项,需要的朋友参考一下 状态管理 一、状态管理(vuex)简介 uex是专为vue.js应用程序开发的状态管理模式。它采用集中存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。vuex也集成刀vue的官方调试工具devtools extensio
Mpx 参考 vuex 设计实现了外部状态管理系统(store),其中的概念与 api 与 vuex 保持一致,为了更好地支持状态模块管理和跨团队合作场景,我们提出多实例 store 作为 vuex 中 modules 的替代方案,该方案在模块拆分及合并上的灵活性远高于 modules。 介绍 Store 是一个全局状态管理容器,能够轻松实现复杂场景下的组件通信需求,store 与简单的全局状态对
本文向大家介绍Vue 2.X的状态管理vuex记录详解,包括了Vue 2.X的状态管理vuex记录详解的使用技巧和注意事项,需要的朋友参考一下 记住上述的顺序情况:想要改变state,只能通过Mutation,虽然action可以直接改变state,这样会使每个状态可以方便的跟踪和记录(用Devtools跟踪) vue Method ---> Actions ---> Mutions -
本文向大家介绍Vuex之理解Store的用法,包括了Vuex之理解Store的用法的使用技巧和注意事项,需要的朋友参考一下 1.什么是Store? 上一篇文章说了,Vuex就是提供一个仓库,Store仓库里面放了很多对象。其中state就是数据源存放地,对应于与一般Vue对象里面的data(后面讲到的actions和mutations对应于methods)。 在使用Vuex的时候通常会创建Stor
本文向大家介绍详解vue组件化开发-vuex状态管理库,包括了详解vue组件化开发-vuex状态管理库的使用技巧和注意事项,需要的朋友参考一下 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension,提供了诸如零配置的