一、什么是Vuex
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。
二、为什么要使用Vuex
Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。如果不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果你的应用够简单,最好不要使用 Vuex。一个简单的 store 模式就足够你的所需了。但是,如果你需要构建一个中大型单页应用,你很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。
三、安装与配置
3.1、安装
npm install vuex -S 默认下载最新版
npm i --save vuex@3
3.2、创建store模块
3.2.1、在src目录下创建store目录,并在目录下分别创建:index.js、actions.js、mutations.js、state.js、getters.js
等文件。
3.2.2、在state.js/actions.js/mutation.js/getter.js
等文件中添加如下内容:
export default {
}
3.3、创建store实例
3.3.1
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
import state from '@/store/state'
import actions from '@/store/actions'
import getters from '@/store/getters'
import mutations from '@/store/mutations'
//创建Vuex的store实例
const store=new Vuex.Store({
state,
getters,
actions,
mutations
})
export default store
3.3.2、注册store
import Vue from 'vue'
import App from './App'
//导入store模块到main.js
import store from './store'
...
Vue.use(VueAxios,axios)
Vue.config.productionTip = false
new Vue({
el: '#app',
router,
store, //在Vue实例中使用store模块
components: { App },
template: '<App/>'
})
四、核心概念
Vuex的核心概念:store、state、getters、mutations、actions。
每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。Vuex 和单纯的全局对象有以下两点不同:
-
Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
-
你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。
属性 解释 State 共享状态(即变量) 提供唯一的公共数据源,所有共享的数据都要统一放到 Store 的 state 中进行存储。 Mutation 更改vuex的store中state的唯一方法,只有通过提交mutation才能修改状态(变量值) Action 类似mutation,修改store中的状态。但是刚才说过只有通过提交mutation才能修改状态,所以Action也是通过提交mutation修改store中的状态 ,与Mutataion不同的是Action支持异步操作 Module 模块,在大型项目中为了方便状态的管理和协作开发将store拆分为多个子模块(modules),每个子模块拥有完整的state、mutation、action、getter。(这里先不介绍) Getter 基于state的派生状态,可理解为组件中的计算属性