什么是Vuex?

是一个公共数据管理工具,可以将共享的数据保存到Vuex里,方便任何组件对这些共享的数据进行调用。

State保存共享数据

通过在根实例(index.js)中注册 store 选项,该 store 实例会注入到根组件下的所有子组件中,且子组件能通过 this.$store 访问到。

创建Vuex对象:

  1. import Vue from 'vue'
  2. import Vuex from 'vuex'
  3. Vue.use(Vuex)
  4. const store = new Vuex.Store({
  5. state: {
  6. msg: "yuxuan"
  7. },
  8. })

state相当于组件中的data,专门用于保存共享的数据

祖先组件中添加store

Vuex学习笔记 - 图1

子组件都可以使用:

  1. <template id="father">
  2. <div>
  3. <p>{{this.$store.state.msg}}</p>
  4. </div>
  5. </template>

前面的this.$store.state是固定的,后面的msg就是其中的某一个共享的数据。

Mutations修改共享数据

以计数器为例,可以在使用的多个子组件里写methods来实现对数据的修改。但是,在Vuex中不推荐直接修改共享数据。因为如果多个组件都修改了共享的数据,那么如果后期数据发生了错误,那么调试将需要一个个组件进行排查,很复杂、低效,不利于维护。

mutations保存方法

store中使用mutations,这用于保存修改共享数据方法

  1. const store = new Vuex.Store({
  2. state: {
  3. count: 0
  4. },
  5. mutations: {
  6. // 在执行mutations中定义的方法的时候,系统会自动给这些方法传递一个state参数
  7. mAdd(state){
  8. state.count = state.count + 1;
  9. },
  10. mSun(state){
  11. state.count = state.count - 1;
  12. },
  13. }
  14. })

通过commit使用

子组件通过commit来使用mutations中定义的方法:

  1. Vue.component({
  2. methods: {
  3. add(){
  4. this.store.commit("mAdd");
  5. }
  6. }
  7. })

Getters计算属性

computed属性类似,计算完后会进行缓存,只有数据发生变化时才会重新计算。

定义

  1. const store = new Vuex.Store({
  2. state: {
  3. msg: "yonni"
  4. },
  5. mutations: {
  6. // 在执行mutations中定义的方法的时候,系统会自动给这些方法传递一个state参数
  7. mAdd(state){
  8. state.count = state.count + 1;
  9. },
  10. },
  11. getters: {
  12. // 同样也要传递进state参数,函数可以通过参数获得数据
  13. formart(state){
  14. return state.msg + " ye"
  15. }
  16. }
  17. })

使用

  1. <div>
  2. {{this.store.getters.formart}}
  3. </div>