import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)// new Vuex.Store() 创建一个 store 这个 store 是用来托管数据的export default new Vuex.Store({ state: { num: 14 }, mutations: { // mutations 中的方法是用来修改 store 中的状态的,这些方法只能通过 commit mutation 的方式得到调用 addNum (state) { // 第一个参数是 上面的 state 对象,通过 state 可以修改 state 里面的状态 state.num++ }, addNumByNum (state, payload) { // payload 称为 载荷 是提交 mutation 时传递过来的数据,通常 payload 是一个对象 console.log(payload) state.num += payload.num } }, actions: { // 在 actions 下面的方法称为 action,action 中可以有异步程序,例如 ajax 和定时器, // 在 action中 更新状态,仍然需要提交 mutation asyncAdd (context, payload) { // context 对象上有 commit 方法,commit() 方法可以提交 mutation // context 对象上还有 dispatch 方法,用于分发其他的 action console.log(payload) setTimeout(() => { context.commit('addNum') // 用 context 上的 commit 方法提交 addNum 这个 mutation }, 1000) } }})// Vuex 是专门为 vue.js 开发的状态管理模式(状态就是数据),采用集中式存储管理应用的状态;相当于把组件中的数据提升到一个全局的地方(所有的组件都能访问到),这个地方就是 vuex 的 store,如果某个组件需要这个数据,直接从 store 中获取(this.$store.state.数据名);// 存储在 store 中的状态同样是响应式的,当 store 中的状态发生变更时,所有用到这个状态的地方都会自动更新// 如果想要修改 store 中的数据,只能提交 mutation;但是 mutation 函数中只能写同步的程序的(修改 state 里面的状态不能写在异步程序中)// 那么异步的处理写在哪里?写在 actions 中// 使用 vuex 的步骤:// 1. 安装 vuex,并且配置 store.js 文件// 2. 把需要 vuex 托管的数据放到 state 中// 3. 如果 state 中的数据需要被修改,则创建相应的 mutation// 4. 如果 state 中的数据会被异步修改,还需要创建 action,并且在 action 中使用 commit mutation 的方式修改 state 里面的数据// 5. 最后导出一个 Vuex 的 Store 实例,并且在创建 Vue 的根实例的时候配置 store 属性,配置 store 属性以后,在组件中可以通过 this.$store 访问 store 实例,// 6. 在整个 Vue 的应用中,任何地方都能访问状态,通过 this.$store.state.数据名 的方式// 7. 更新数据,如果是同步更新,提交 mutation 【this.$store.commit(mutation的名字, 传给 mutation 的参数)】;如果是异步更新,分发 action 【this.$store.dispatch(action的名字, payload)】// 个人建议,如果这些数据被多处依赖了,再放到 vuex 中;// vuex 在项目中的应用,很多人都喜欢把数据都写在 vuex 中,不管是不是被多处依赖了;