Vuex

2018-11-29  本文已影响0人  哎呦呦胖子斌

        Vuex是为了保存组件之间共享数据而诞生的,如果组件之间有要共享的数据可以直接挂载到vuex中,而不必通过父子组件之间传值了,如果组件的数据不需要共享,此时这些不需要共享的私有数据没有必要放到vuex中。
        只有共享的数据才有权利放到vuex中;
        组件内部私有的数据,只要放到组件的data中即可。
        Vuex是一个全局共享数据的存储区域,就相当于是一个数据的仓库。

使用方法

1. 安装

npm I vuex –s

2. vue中导入

Vue.use(Vuex);

var store = new Vuex.Store({
  state:{
    count:99
  },
  mutations:{
    incrementGoods(state,num){
      state.count = num;
    }
  },
  getters:{
    changeData:function(state){
      return '当前的数据是' + state.count;
    }
  }
})

3. 挂载到vue组件上

new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>',
  store
})

4. 使用
数据使用:

{{$store.state.count}}

方法调用:

this.$store.commit('incrementGoods',this.num);

getters使用

this.$store.getters.changeData

注意:
mutations

// 如果想要操作store中的state的值,只能通过调用mutations提供的方法才能操作对应的数据,
    // 不推荐直接操作state中的数据,因为万一导致了数据的紊乱,不能快速定位到错误的位置
    // mutations的参数列表中最多只能支持两个参数,其中参数1是state状态,参数2是通过commit提交过来的参数,
    // 所以如果想要传多个参数的话可以传一个对象

getters

// 这里的getters只负责对外提供数据,不负责修改数据,如果想要修改数据只能通过mutations
  // getters中的方法和组件中的过滤器filters比较类似,他们都没有修改原数据,知识把元数据做了一层包装提供给了调用者
  // getters也和computed比较像,只要state中的数据发生了变化,那么如果getters正好也引用了这个数据机会立即触发getters的重新求值

总结:
1. 如果组件想要直接从state上获取数据,需要通过:this.store.state.参数名 2. state中的数据不能直接修改,如果组件想要修改数据,必须通过mutations提供的方法,需要通过:this.store.commit(‘方法名’,唯一的一个参数)
3. 如果store中state上的数据在对外提供的时候需要做一层包装,那么推荐使用getters,如果需要使用getterss则需要通过:this.$store.getters.方法名

上一篇下一篇

猜你喜欢

热点阅读