基础知识系列(十四):Vue2的Vuex的基本使用

本文介绍了Vuex在Vue应用中的关键概念,包括state、mutations、actions、getters以及如何在App.vue中管理和操作状态,以及如何使用modules进行模块化管理。

一:Vuex的核心概念:

1.state:应用程序中需要管理的状态数据。

2.mutations:用于修改状态的方法,但必须是同步函数。

3.actions:用于提交 mutation,而不是直接变更状态,可以包含任意异步操作。

4.getters:允许组件从 sstore 中获取数据,类似于组件的计算属性。

5.modules:允许将 store 分割成模块,每个模块拥有自己的 state、mutations、actions、getters。

在App.vue中,写

<template>
  <div>
    <div>
      APP根组件{{ $store.state.count }}
    </div>
    <div>
      <!-- {{ name }} -->
      {{ fullName }}   <!-- {{ this.$store.getters.fullName }} -->
    </div>
    <button @click="add">按我递增10</button>
    <button @click="addCount(20)">按我递增20</button>
  </div>
</template>

<script>
import { mapState,mapMutations,mapActions, mapGetters } from 'vuex'
export default {
  mounted() {
  },
  computed: {
    ...mapState(['count', 'name']),
    ...mapGetters(['fullName'])
  },
  methods:{
    add(){
      // this.addCount(10)   // this.$store.commit('addCount',10)

      this.addCountAsync(10)   // this.$store.dispatch('addCountAsync',10)
    },
    ...mapMutations(['addCount']),
    ...mapActions(['addCountAsync'])
  }
}
</script>

在main.js中,写

import Vue from 'vue'
import App from './App.vue'
import store from './store'

Vue.config.productionTip = false

new Vue({
  store,
  render: h => h(App)
}).$mount('#app')

在store文件夹的index.js文件,其中写

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

Vue.use(Vuex)
// store理解为公共的状态空间
const store = new Vuex.Store({
  // 存放初始状态
  state: {
    count:0,
    name:'佩奇'
  },
  // 存放计算属性
  getters: {
    fullName(state){
      return "小猪" + state.name
    }
  },
  // 同步
  mutations: {
    addCount(state,payload){  
      state.count += payload
    }
  },
  // 异步
  actions: {
    addCountAsync(ctx,payload){
      setTimeout(()=>{
        ctx.commit('addCount',payload)
      },3000)
    }
  },
  modules: {
  }
})

export default store

二、 modules的使用示例:

// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';
import moduleA from './moduleA';
import moduleB from './moduleB';

Vue.use(Vuex);

const store = new Vuex.Store({
  modules: {
    moduleA,
    moduleB
  }
});

export default store;
// store/moduleA.js
const moduleA = {
  state: {
    count: 0
  },
  mutations: {
    increment(state) {
      state.count++;
    }
  },
  actions: {
    incrementAsync(context) {
      setTimeout(() => {
        context.commit('increment');
      }, 1000);
    }
  },
  getters: {
    doubleCount(state) {
      return state.count * 2;
    }
  }
};

export default moduleA;

PS:1.pnpm i vuex;2.展开运算符:应用场景有展开数组元素、展开对象属性、 与解构并用等

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值