25.Vuex 结合 Composition API的使用

Vuex结合CompositionAPI使用

Composition API中没有this.$store,可以使用useStore来替代

import { useStore } from 'vuex'

export default {
  setup () {
    const store = useStore()
  }
}
  1. Composition API中访问state和getters

    import { computed } from 'vue'
    import { useStore } from 'vuex'
    
    export default {
      setup () {
        const store = useStore()
    
        return {
          // access a state in computed function
          count: computed(() => store.state.count),
          // access a getter in computed function
          incCount: computed(() => store.getters.incCount)
        }
      }
    }
    
  2. Composition API中访问Mutations和Actions

    import { useStore } from 'vuex'
    
    export default {
      setup () {
        const store = useStore()
    
        return {
          // access a mutation
          incCount: () => store.commit('incCount'),
    
          // access an action
          incSetBanner: () => store.dispatch('incSetBanner')
        }
      }
    }
    

    完整示例:

    在News.vue组件中结合Composition API使用store,

    访问state,getters,mutations,actions

    <template>
        <div>
            <h1>Composition API使用Vuex</h1>
            访问userStore模块里面state数据count:{{count}}
            <br>
            访问userStore模块里面state数据num:{{num}}
            <br>
            访问userStore模块里面getters的revMsg:{{revMsg}}
            <br>
            <button @click="incCount">调用userStore模块的mutations的incCount方法</button>
            <br>
            banner:{{banner}}
            <br>
            <button @click="doCount">调用userStore模块的actions的doCount方法</button>
            <br>
            <button @click="incSetBanner">调用userStore模块的actions的incSetBanner方法</button>
    
        </div>
    </template>
    
    <script lang="ts">
        import {defineComponent,computed} from "vue";
        import {useStore} from 'vuex'
        export default defineComponent({
            setup() {
                const store=useStore();
                return {
                    // 访问userStore里面的state=>count
                    count:computed(() => store.state.user.count),
                    banner:computed(() => store.state.user.banner),
                    // 访问userStore里面的getters=>num
                    num:computed(() => store.getters.num),
                    // 访问userStore里面的getters=>revMsg
                    revMsg:computed(() => store.getters.revMsg),
                    // 调用userStore里面的mutations=>incCount
                    incCount: () => store.commit("incCount"),
    
                    // 调用userStore里面的actions=>doCount
                    doCount:()=>store.dispatch("doCount"),
                    // 调用userStore里面的actions=>incSetBanner
                    incSetBanner:()=>store.dispatch("incSetBanner"," 传递的参数")
                }
            }
        });
    </script>
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值