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.commit(‘方法名’,唯一的一个参数)
3. 如果store中state上的数据在对外提供的时候需要做一层包装,那么推荐使用getters,如果需要使用getterss则需要通过:this.$store.getters.方法名