vue: vuex getters mutations actions

getters: 可以减少代码量,如果其他组件需要,直接在计算属性return this.$store.getters.doubleCount拿便可。

预算可以从result和anotherRsult组件迁移到index.js文件中。

        import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 100,
  },
  getters: {
 doubleCount(state) {
 return state.count * 2
 // 类似计算属性
      }
  },
  mutations: {
      increaseCount(state) {
          state.count++;
      },
     decreaseCount(state) {
         state.count--;
      }
  }
})

      

v2-098ee501e3df870f35396631d4b5fe62_b.jpg

v2-a6aca758efb20be0fc2679962f4aa2da_b.gif

原理: getters中的doubleCount监听state中的count数据,然后处理,处理了之后,组件中的计算属性在监听doubleCount,跟着改变。


mutations: 在很多组件中,对同一个变量进行函数操作,加加减减等,容易造成数据混乱,所以vue不允许直接在组件的methods字段中的函数直接进行++--,所以迁来了mutations这里进行操作。

mutations代码已经写在上面的index.js文件中了,这是counter.vue组件

        <template>
    <div>
        <button class="btn btn-primary" @click="increase"></button>
        <button class="btn btn-primary" @click="deincrease"></button>
    </div>
</template>
<script>
export default {
    methods: {
        increase() {
            // this.$store.state.count++
            // 只是示范 不能直接改变
            this.$store.commit("increaseCount")
            // 应该这样操作
        },
        deincrease() {
            // this.$store.state.count--
            this.$store.commit("decreaseCount")
        }
    }
}
</script>
      

v2-1168e5214152d9a865104f97e3be99e6_b.jpg

注意的点: mutations必须是同步的代码,不能写异步的代码,虽然不会报错,但是不允许。执行了mutations里面的代码,数据就必须会改变,但是异步没有立即改变。

mutations可以传值,但是只能传一个形参,传多个使用对象

        // counter.vue组件中的js部分
export default {
    methods: {
        increase() {
            this.$store.commit("increaseCount", 5) // 传值
        },
        deincrease() {
            this.$store.commit("decreaseCount")
        }
    }
}

      

index.js代码

        import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 100,
  },
  getters: {
 doubleCount(state) {
 return state.count * 2
      }
  },
  mutations: {
 increaseCount(state, num) { // 接收值
 state.count += num;
      },
 decreaseCount(state) {
 state.count--;
      }
  }
})

      

v2-8ea29f3f3a6fca9640115f72ca5b83db_b.gif


actions: 存放异步函数

触发action: this.$store.dispatch

index.js文件

        import Vuex from 'vuex'
import Vue from 'vue'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    count: 100,
  },
  getters: {
 doubleCount(state) {
 return state.count * 2
      }
  },
  mutations: {
 increaseCount(state, num) {
 state.count += num;
      },
 decreaseCount(state) {
 state.count--;
      }
  },
  actions: {
      actionsIncrease(context) {
          setTimeout(() => {
              context.commit('increaseCount', 7)
              // 提交执行同步中的increaseCount函数
          }, 1000)
      }
  }
})

      

counter.vue中触发异步函数

        <template>
    <div>
        <button class="btn btn-primary" @click="increase"></button>
        <button class="btn btn-primary" @click="deincrease"></button>
    </div>
</template>
<script>
export default {
    methods: {
        increase() {
            this.$store.dispatch("actionsIncrease")
            // 触发异步函数字段
        },
        deincrease() {
        this.$store.commit("decreaseCount")
        }
    }
}
</script>
      

v2-55489f9c415903caae633859ce52ec1c_b.gif

v2-a31dcf2cd3dfd9f0c0367817fc652cbd_b.jpg

环的工作原理。


vue dev tools工具

是一个浏览器的插件,下载即可使用(不行重启一下浏览器就好了),是vue开发模式则亮点,不是则熄灭。

v2-49273ee8df7c6061bafe95cd6d2a6b47_b.png

v2-dec16eaad3dbbb1b3c45e72cf0cbb86b_b.png

写同步就是为了方便看这个时间戳,可以知道是什么时候发生的,什么函数导致改变的

v2-a44733bc841f3711deeb60c6cbe7e3ab_b.gif

还可以回去定位。追踪bug

v2-b835af12cfd7aa482255cf98421cf61f_b.gif

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值