在学习Vue开发中,组件通信一直是一大痛点。当项目是一个非常简单的SPA或者多入口项目时,可以依赖vue自带的prop/$emit进行组件通信;如果规模较大,可以使用总线与兄弟组件通信;如果项目更大,就会有更多复杂的组件关系,复杂的组件通信会让你怀疑人生。好在vue官方出品了vuex,通过全局状态管理解决了这个痛点。vuex虽然很好用,但是我和很多朋友都抱怨vuex的文档和vue-ssr的文档一样,让人看的一头雾水。安装导入一般情况下,我们在使用vue-cli3生成项目时,可以选择将vuex集成到项目中。此时vue-cli3会自动安装vuex并在src文件夹下生成store.js,完成vuex的引入和配置。但是很多同学在生成项目的时候并没有使用vue-cli3或者没有选择集成vuex。此时只能手动安装和引入vuex。安装因为vuex是用来进行全局状态管理的,所以它不仅可以用在开发环境中,也可以用在生产环境中。显然,安装vuex应该使用-S或者--save命令。npminstallvuex-S引入一个类似vue-cli3生成的工程,我们在src文件夹下新建一个store.js,在里面写://store.jsimportVuefrom'vue'importVuexfrom'vuex'看。使用(Vuex)exportdefaultnewVuex.Store({})然后,我们只需要在vue实例中的store.js中导入Vuex.Store实例://main.jsimportVuefrom'vue'importAppfrom'。/App.vue'importrouterfrom'./router'importstorefrom'./store'Vue.config.productionTip=falsenewVue({router,//importstorestore,render:h=>h(App)}).$mount('#app')Vuex的使用完成了vuex的安装和引入,接下来我们进入Vuex的使用。vuex中包含三个元素:state、mutation和action。它们之间的关系可以用官网那张名图来表示:重点在这里(State)简单来说,state代表状态,类似于vue中的data(其实本质上是类似的,vuex在beforeCreatevue将状态混合到数据中的钩子)。然而,它们有很大的不同:从用户的角度来看,state是全局的,这要归功于vuex的设计理念——单一状态树。我将在接下来的几篇文章中详细介绍这些。现在我们只需要知道state类似于global下的data即可。下面我们通过一个简单的例子来体验一下state:首先,我们需要修改store.js文件,配置state。可以看出,我们在生成Vuex.Store实例时,传入了实例化option对象,其中包含一个state属性,state对象的属性就是我们定义的全局状态。此时,我们定义了一个全局状态——count,并设置其初始值为1。//store.jsimportVuefrom'vue'importVuexfrom'vuex'Vue.use(Vuex)exportdefaultnewVuex.Store({//添加状态state:{count:1}})接下来,我们需要添加Count在中被引用,因为它是一个全局状态,我们可以在任何组件中使用它。为了展示它的强大功能,我们在两个不同的组件中使用它。首先我们在App.vue中使用它:在模板中,我们使用$store.state.count来导入这个全局状态,没错,就是这么简单,以$store.state.key的形式调用即可。//App.vue
