vuex的初使用

欢迎访问我的博客地址 : 博客地址
router.js

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)


const state = {
     num:0
}
const mutations = {     //变更Store中的数据
    add(state,step){   //累加step,若不加step,则可以直接定义好累加值
        state.num += step
    },sub(state,step){ //累减step
        state.num -= step
    },

     //可以执行异步操作,但Mutation必须是同步函数,所以这种写法错误
    // add(state,step){    
    //   setTimeout(() => {
    //       state.num += step
    //   }, 1000);
    // }

}
const actions = {   //提交mutations,间接调用mutations,可执行异步操作
      addActioins(state,step){
            state.commit('add',step)
      },
      addAsync(state,step){
        setTimeout(() => {
            state.commit('add',step)
        }, 1000);
      },
      subActions(state,step){
            state.commit('sub',step)
      },
      subAsync(state,step){
          setTimeout(() => {
              state.commit('sub',step)
          }, 1000);
      }
}
const getters = {  //getter对Store中已有的数据进行加工处理之后形成的数据,类似于vue中computed计算属性,起到包装作用
                  //getter中的数据跟随Store中的数据变化而变化
      gettersNum(state){
          return "当前num的值为:"+state.num
      }
}

export default new Vuex.Store({
    state,
    mutations,
    actions,
    getters
})

使用

<template>
    <div>
            <h1>
                 <!-- 方法一:state直接调用 -->
               state1: 当前num的值为{{$store.state.num}}   <hr>
                <!-- 方法二:通过mapState函数映射出来 -->
               state2:当前num的值为 {{num}}          <hr>
               <!-- 方法3:getters直接调用 -->
               state3:{{this.$store.getters.gettersNum}}            <hr>
               <!-- 方法4:通过mapGetters计算属性直接映射 -->
               state4:{{gettersNum}}                    <hr>
           </h1>
           <button @click='handleAdd'>add</button>
           <button @click='handleSub'>sub</button>  <hr>
           <button @click='handleAddActions'>addActioins</button>
           <button @click='handleAddAsync'>addAsync</button>
           <button @click='addAsync(5)'>addAsync1</button>
    </div>
</template>

<script>
    import { mapState,mapMutations,mapActions,mapGetters } from 'vuex';
    //引入所需函数
export default{
    computed:{
        ...mapState(['num']),
         // 将num 映射为this.$store.state.num,          使用对象展开运算符将此对象混入到外部对象中
         ...mapGetters(['gettersNum'])
           // 将num 映射为this.$store.getters.gettersNum, 
    },methods:{
         ...mapMutations(['add','sub']), 
        //将add() 映射为this.$store.commit('add')  
        ...mapActions(['addActioins','addAsync']),
        //将addActioins() 映射为this.$store.dispatch('addActioins') 

        handleAdd(){
            //1- 直接使用this.$store.commit()调用事件函数
            // this.$store.commit('add',5)
            //2- 使用mapMutations函数映射
            this.add(5)
        },handleSub(){
            this.sub(5)
        },handleAddActions(){
            //1- 直接使用this.$store.dispatch()调用事件函数
             this.$store.dispatch('addActioins',5) 
            //2- 使用mapMutations函数映射
            // this.addActioins(5)
        },handleAddAsync(){
            this.addAsync(5)
        }
    }
}
</script>

<style lang='stylus' scoped>
    div
        padding 30px
</style>
</script>

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
VuexVue.js的官方状态管理库,用于管理Vue.js应用程序中的共享状态。Vuex将应用程序的状态存储在一个集中的地方,使得状态的变化变得可预测和易于调试。下面是Vuex使用步骤: 1. 安装Vuex 可以使用npm或者yarn来安装Vuex。在终端中输入以下命令: ``` npm install vuex --save ``` 2. 创建store 在Vue.js应用程序中创建store。新建一个store.js文件,然后导入Vue和Vuex并创建一个store对象: ``` import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++ } }, actions: { incrementAsync({ commit }) { setTimeout(() => { commit('increment') }, 1000) } } }) export default store ``` 在上面的代码中,我们定义了一个state对象来存储我们的数据(这里只有一个count属性)。我们还定义了一个mutation对象来修改state中的数据。最后,我们还定义了一个action对象来触发mutation中的方法。 3. 在Vue组件中使用store 在Vue组件中使用store来获取或修改数据、触发action等。可以使用Vue.js提供的mapState、mapMutations、mapActions等辅助函数来简化代码。例如: ``` <template> <div> <p>Count: {{ count }}</p> <button @click="increment">Increment</button> <button @click="incrementAsync">Increment Async</button> </div> </template> <script> import { mapState, mapMutations, mapActions } from 'vuex' export default { computed: { ...mapState(['count']) }, methods: { ...mapMutations(['increment']), ...mapActions(['incrementAsync']) } } </script> ``` 在上面的代码中,我们使用了mapState来将store中的count属性映射到组件的computed属性中。我们还使用了mapMutations和mapActions来将mutation和action方法映射到组件的methods中。这样,我们就可以直接在组件中使用increment和incrementAsync方法来修改state中的数据了。 以上就是Vuex使用步骤。当然,Vuex还有很多其他的功能,比如getters、modules等,可以根据实际需求来使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小钱要努力

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值