深入理解 Vuex 中的this.$store.dispatch方法

本文深入解析Vue.js应用中的状态管理模式Vuex,详细介绍dispatch与commit方法的使用,包括Mutation的触发与参数传递,以及如何在store中定义Mutation。通过实际案例,帮助读者理解Vuex在项目中的具体应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》《2024面试高频手撕题》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》《带你从入门到实战全面掌握 uni-app》
💬 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站

基础知识

在 Vuex 中,this.$store.dispatch 方法用于向 store 发起一个mutation 事件。

Mutation 是改变 Vuex 存储状态的唯一方法。

以下是 this.$store.dispatch 方法的基本使用示例:

1.首先,确保你在 Vue 组件中已经引入了 Vuex:

import Vuex from 'vuex';

2.然后,在你的组件中使用 this.$store.dispatch 方法来触发一个Mutation:

// 假设你有一个名为 increment 的 Mutation
this.$store.dispatch('increment');

3.在你的 Vuex store 中定义这个 Mutation:

const store = new Vuex.Store({
  state: {
    count: 0
  },
  mutations: {
    increment (state) {
      state.count++;
    }
  }
});

通过以上步骤,你可以使用 this.$store.dispatch 方法来触发 increment Mutation,从而递增 count 的值。

需要注意的是,this.$store.dispatch 方法需要一个字符串作为参数,这个字符串对应于你在 Vuex store 中定义的 Mutation 的名称。

另外,还可以通过传递一个对象作为第二个参数来传递 Mutation 的参数:

this.$store.dispatch('increment', 5);

这将把 5 作为 increment Mutation 的参数传递给它。

知识储备

在 Vuex 中,需要使用 commit 方法来触发mutations 里的方法
mutations用于改变 Vuex 存储状态的唯一方式

以下是一个示例:

  1. 首先,确保你在 Vue 组件中已经引入了 Vuex:

    import Vuex from 'vuex';
    
  2. 然后,在你的组件中使用 this.$store.commit 方法来触发一个 Mutation:

    // 假设你有一个名为 SET_TOKEN 的 Mutation
    this.$store.commit('SET_TOKEN', tokenV);
    

    在这个示例中,SET_TOKEN 是你在 Vuex store 中定义的 Mutation 的名称,tokenV 是你要传递给Mutation 的参数。

  3. 最后,在你的 Vuex store 中定义这个 Mutation:

    const store = new Vuex.Store({
      state: {
        // 存储状态的地方
      },
      mutations: {
        // 定义 Mutation
        SET_TOKEN (state, token) {
          state.token = token;
        }
      }
    });
    

通过以上三个步骤,你可以使用 this.$store.commit 方法来触发 SET_TOKEN Mutation,从而在 store 中成功存储 tokenV

需要注意的是,在使用 commit 方法时,确保传递正确的 Mutation 名称和参数。如果 Mutation 名称或参数不正确,或者没有在 store 中定义相应的 Mutation,那么存储操作可能会失败。

案例解析

传送门

main.js

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

store/index.js
在这里插入图片描述

在store/modules文件夹里的user.js,声明user并释放出来。

const user = {
  state: {
    token: '',
    roles: null,
    isMasterAccount:true,
  },

  mutations: {
    SET_TOKEN: (state, token) => {
      state.token ="Bearer " +token 
    },
  },
  actions: {
    // 登录
    Login({
      commit
    }, userInfo) {
      return new Promise((resolve, reject) => {
        login(userInfo.account, userInfo.password).then(x => {
          if(x.status==200){
            const tokenV = x.data.token.tokenValue
            commit('SET_TOKEN', tokenV)
            document.cookie=`AuthInfo=Bearer ${tokenV};path:/`;
            token="Bearer "+tokenV;
            //setToken("Bearer " +token)
            resolve();
          }
          
        }).catch(error => {
          console.log("登录失败")
          reject(error)
        })
      })
    },
  }
}

export default user

注:必须要用commit(‘SET_TOKEN’, tokenV)调用mutations里的方法,才能在store存储成功。

handleLogin() {
   this.loading = true
    this.$store.dispatch('Login', this.loginForm).then(() => {
           this.$router.push({
               path: '/manage/merchant/account'
           }); //登录成功之后重定向到首页
           this.loading = false
           // this.$router.push({ path: this.redirect || '/' })
       }).catch(() => {
           this.loading = false
       })
     }

this.$store.dispatch(‘Login’, this.loginForm)来调取store里的user.js的login方法,从而要更新。

Vuex 是一个用于 Vue.js 应用程序的状态管理库。它允许您在应用程序中集中管理和共享状态,以便多个组件可以访问和修改相同的状态数据。 Vuex 的核心概念包括: 1. State(状态):Vuex 使用一个单一的状态树来存储应用程序的所有状态数据。您可以将状态视为应用程序的数据源,所有组件都可以从中获取数据。状态是响应式的,当状态发生变化时,相关的组件会自动更新。 2. Mutation(变更):Mutation 是用于修改状态的方法。它们是同步函数,接受当前的状态作为第一个参数,并接受可选的负载数据作为第二个参数。通过提交一个 Mutation,可以在其中修改状态,以确保状态的变更是可追踪和可预测的。 3. Action(动作):Action 类似于 Mutation,但是可以包含异步操作。它们可以用于处理异步逻辑、调用 API、提交 Mutation 等。Action 通过提交 Mutation 来间接修改状态。 4. Getter(获取器):Getter 可以看作是从状态中派生出来的计算属性。它们允许您在 store 中定义一些可以在多个组件中重用的计算逻辑。 通过创建一个 Vuex store,您可以集中管理应用程序中的状态,并通过在组件中使用 getter、commit mutation 或 dispatch action 的方式来访问和修改状态。 在 Vue.js 应用程序中使用 Vuex,您需要先安装 Vuex 并将其配置为应用程序的一部分。然后,您可以创建一个包含状态、mutations、actions 和 getters 的 store 对象,并在 Vue 组件中使用 `this.$store` 来访问 store 中的数据和方法。 希望这个解释对您有帮助!如果您还有其他问题,请随时提问。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

阿珊和她的猫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值