本文纯属一个vuex的介绍了解,具体可看vuex的文档
vuex是一个状态管理模式,一般用在大型应用上,就是把之前在各个组件里面的data单独提出来,统一去管理,这样就更好得解决了组件与组件之间复杂的通讯问题,如果是小应用,就直接用bus等通讯即可。
借用github上一个4w多star的vue项目作者的一句话

这里我个人建议不要为了用 vuex 而用 vuex。就拿我司的后台项目来说,它虽然比较庞大,几十个业务模块,几十种权限,但业务之间的耦合度是很低的,文章模块和评论模块几乎是俩个独立的东西,所以根本没有必要使用 vuex 来存储data,每个页面里存放自己的 data 就行。当然有些数据还是需要用 vuex 来统一管理的,如登录token,用户信息,或者是一些全局个人偏好设置等,还是用vuex管理更加的方便,具体当然还是要结合自己的业务场景的。总之还是那句话,不要为了用vuex而用vuex!

State

state类似之前组件里面的data,里面能存储一些数据,然后可以通过this.$store.state来进行拿到值

const store = new Vuex.Store({
      strict: true,
      state: {
        num: 1
      }
    })

Mutations

mutations中文的意思是突变,这个类似组件里面的methods,以往我们要修改data里面的数值,可以定义一个methods,去进行修改,但是在vuex中,如果随随便便定义个方法去修改vuex里面的数据是不符合逻辑,即使能成功,但是也会报出个错,所以我们需要一个触发一个mutations去修改state里面的值,

mutations: {
  change (state, n) {
    state.count += n
  }
}

这时候在组件里面就需要用类似非父子组件传递数据用到的emit一样,用一个事件去触发跑出刚刚新建的change这个mutations

this.$store.commit('change',10)

Getter

getter类似vue局部组件里面的computed属性,能够在store里面新建一个类似全局的计算属性,除了当属性使用,还可以返回一个函数,当做方法使用。

const store = new Vuex.Store({
      strict: true,
      state: {
        num: 1
      },
      getters: {
        newNum: state => {
          return state.num++
        }
      }

然后可以通过$store.getters.newNum去访问

Action

action其实是mutation的一个补充,mutation虽好用,但是仅仅能执行同步的代码,然而用action即可很随意,

 actions: {
        add(context) {
          context.commit('change')
        }
      }

里面的context是与store实例具有相同方法和属性的一个对象

未完待续

Last modification:January 7, 2020
If you think my article is useful to you, please feel free to appreciate