Vuex

Vuex和redux是一个状态管理模式,它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。

Vuex 和单纯的全局对象有以下两点不同:

1、Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
2、你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

Vuex_第1张图片
vuex中,有默认的五种基本的对象

1、state:存储状态(变量)->子组件能通过 this.$store.state.name 访问到state里面的属性;mapState 辅助函数;store.state 来获取状态对象,以及通过 store.commit 方法触发状态变更。

2、getters:是一个对store中的state做处理的公共方法,getter 的返回值会根据它的依赖被缓存起来,且只有当它的依赖值发生了改变才会被重新计算。对数据获取之前的再次编译,可以理解为state的计算属性。我们在组件中使用 $sotre.getters.fun()
通过属性访问:Getter 会暴露为 store.getters 对象,你可以以属性的形式访问这些值:store.getters.doneTodos ;mapGetters 辅助函数仅仅是将 store 中的 getter 映射到局部计算属性

3、mutations:修改状态,mutation 必须是同步函数。在组件中使用$store.commit('',params)。这个和我们组件中的自定义事件类似。

4、actions:异步操作。在组件中使用是$store.dispath(''),mapActions 辅助函数将组件的 methods 映射为 store.dispatch 调用

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++
    }
  },
  actions: {
    increment (context) {
      context.commit('increment')
    }
  }
})
store.dispatch('increment');//Action 通过 store.dispatch 方法触发

//action 内部执行异步操作:
actions: {
  incrementAsync ({ commit }) {
    setTimeout(() => {
      commit('increment')
    }, 1000)
  }
}

5、modules:store的子模块,为了开发大型项目,方便状态管理而使用的。这里我们就不解释了,用起来和上面的一样。
例如

const moduleA = {
  state: { ... },
  mutations: { ... },
  actions: { ... },
  getters: { ... }
}

const moduleB = {
  state: { ... },
  mutations: { ... },
  actions: { ... }
}

const store = new Vuex.Store({
  modules: {
    a: moduleA,
    b: moduleB
  }
})

store.state.a // -> moduleA 的状态
store.state.b // -> moduleB 的状态

你可能感兴趣的:(vue)