Vuex的使用

Vuex的使用

安装

// vue2安装
npm i vuex@3
// vue3安装
npm i vuex@4    

配置

  1. 创建store文件夹和index.js
  2. 配置index.js
import Vue from "vue";
import Vuex from "vuex";
Vue.use(Vuex);

export default new Vuex.Store({
    // state 统一定义数据,类似于组件里面的data,所有在vuex中使用的变量都要在这里声明和初始化
    state(){
        return {
        }
    },
    // mutations本质是js函数,专门用来修改state中的数据(必须是同步函数,不能有异步代码)
    // 载荷只能有一个,如果需要传入多个,可以写成对象形式
    mutations:{
        mutation名1:function(state [, 载荷]) {
        },
    },
    // getters 是 Vuex 中的计算属性,当 Store 数据源发生变化时,Getter 的返回值会自动更新。
    getters:{
        getter的名字1: function(state) {
          return 要返回的值
        }
    },
    // Action 本质上是 JavaScript 函数,专门用来处理 Vuex 中的异步操作
    // action是间接修改state的,是通过调用 mutation来修改state
    actions:{
        // context对象会自动传入,它与store实例具有相同的方法和属性(context名字可改变)
        action的名字: function(context [, 载荷]) {
          // 1. 发异步请求, 请求数据
          代码段
          // 2. commit调用mutation来修改数据(一般与之对应的mutation名的命名都用全部大写之后的action名)
          context.commit('mutation名', 载荷)
        }
    }
})
  1. 在main.js中引入store
import store from "@/store"
new Vue({
    render: h => h(App),
    store
}).$mount('#app')

vuex分为五个大块

state: 统一定义公共数据(类似于data(){return {a:1, b:2,xxxxxx}})
mutations : 使用它来修改数据(类似于methods)
getters: 类似于computed(计算属性,对现有的状态进行计算得到新的数据)
actions: 发起异步请求
modules: 模块拆分

state使用

// 方法一(直接使用)
this.$store.state.变量名

// 方法二(引入,之后可视为计算属性使用)
// 基于 Vuex 提供的 mapState 辅助函数,可以方便的把 Store 中指定的数据,映射为当前组件的计算属性
// 使用之前需要引入mapState,方法: import { mapState } from 'vuex';
computed:{
    ...mapState(['变量名1','变量名2']),
    ...mapState({'在当前组件中使用的变量名':'vuex仓库中的变量名'}),  //一次只能声明一个变量
}

mutations使用

// 方法一(直接使用)
this.$store.commit('mutation名', 实参);

// 方法二(引入,之后可视为methods方法使用)
// 基于 Vuex 提供的 mapMutations 辅助函数,可以方便的把 Store 中指定的方法,映射为当前组件的 methods
// 使用之前需要引入mapMutations,方法: import { mapMutations } from 'vuex';
methods:{
    ...mapMutations(['mutation名1','mutation名2']), 
    ...mapMutations({'在当前组件中使用的名字': 'mutation名'})
}

getter使用

// 方法一(直接使用)
this.$store.getters.getter的名字

// 方法二(引入,之后可视为计算属性使用)
// 基于 mapGetters 辅助函数,可以把 store 中的 getter 映射为当前组件的计算属性
// 使用之前需要引入mapGetters,方法: import { mapGetters } from 'vuex';
computed: { 
  ...mapGetters(['getter的名字']), 
  ...mapGetters({'在当前组件中使用的名字': 'getter的名字'})
}

actions使用

// 方法一(直接使用)
this.$store.dispatch('actions的名字', 参数)

// 方法二(引入,之后可视为methods方法使用)
// 基于 Vuex 提供的 mapActions 辅助函数,可以方便的把 Store 中指定的 Action,映射为当前组件的 methods
// 使用之前需要引入mapActions,方法: import { mapActions } from 'vuex';
computed: { 
  ...mapActions(['actions的名字']), 
  ...mapActions({'在当前组件中使用的名字': 'actions的名字'})
}

应用场景二(用modules来拆分复杂业务)

在中大型项目中,所有的全局数据、方法都集中在了一起,导致 Vuex 的结构混乱,不利于现阶段的开发和后期的维护

1. store/index.js配置

export default new Vuex.Store({
    // state: 用来保存所有的公共数据
    state: {},
    getters: {},
    mutations: {},
    actions: {},
    modules: {
        模块名1,模块名2
    }
})

2. 根据index.js中的模块名在同一目录下创建对应的js文件

export default {
    namespaced: true,//开启命名空间
    state: {
    },
    mutations: {
    },
    actions: {
    },
    getters: {},
}

3. 在组件中使用

// state使用
this.$store.state.模块名.变量名
...mapState('模块名',['变量名1','变量名2'])

// mutations使用
this.$store.commit('模块名/mutation名', 实参);
...mapMutaions('模块名',['方法名'])

// getters使用
this.$store.dispatch.模块名.变量名
...mapGetters('模块名',['变量名1','变量名2'])

// actions使用
this.$store.mapActions('模块名/actions名', 实参);
...mapActions('模块名',['方法名'])

参考链接

https://blog.csdn.net/m0_70477767/article/details/125155540
https://blog.csdn.net/Liberty_yes/article/details/122843834

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值