Vuex的简单实例(5)

Vuex的简单实例(5)

Vuex之action

1)在mutation中我们讲到,mutation中是存放处理数据的方法的集合,我们使用的时候需要commit。但是commit是同步函数,而且只能是同步执行。那我们想异步操作怎么办?作用:在actions中提交mutation,并且可以包含任何的异步操作。actions可以理解为通过将mutations里面处里数据的方法变成可异步的处理数据的方法,简单的说就是异步操作数据(但是还是通过mutation来操作,因为只有它能操作)。
Action类似于Mutation,不同在于:
Action提交的是mutation,而不是直接变更状态;
Action可以包含任意异步操作,
让我们在store.js里来注册一个简单的action

const store = new Vuex.Store({
    state: {
    // ...
    },
    getters: {
    // ...
    },
    mutations: {
    // ...
    },
    actions: {
      changeLogin (context) {
        context.commit('changeLogin')
      },
      changeUsername (context) {
        context.commit('changeUsername')
      },
      changePassword (context) {
        context.commit('changePassword')
      }
    }
})

2)Action函数接受一个与store实例具有相同方法和属性的context对象,因此你可以调用context.commit提交一个mutation,或者通过context.state和context.getters来获取state和getters。实践中,可以用参数结构来简化代码:

 actions: {
      changeLogin ({commit}) {
        commit('changeLogin')
      },
      changeUsername ({commit}) {
        commit('changeUsername')
      },
      changePassword ({commit}) {
        commit('changePassword')
      }
    }

3)因为这三个mutation都是需要传参的,所以action也要能传入参数。

 actions: {
      changeLogin ({commit}, data) {
        commit('changeLogin', data)
      },
      changeUsername ({commit}, data) {
        commit('changeUsername', data)
      },
      changePassword ({commit}, data) {
        commit('changePassword', data)
      }
    }

4)回到Login.vue调用action试试。Action通过store.dispatch方法触发(调用)

methods: {
    LoginHandle () {
      // 表单验证
      if (!this.username || !this.password ) return;
      
      // 修改isLogin状态
      // this.$store.commit('changeLogin', true)
      this.$store.dispatch('changeLogin', true)
      // 修改username状态
      // this.$store.commit('changeUsername', this.username)
      this.$store.dispatch('changeUsername', this.username)
      // 修改password状态
      // this.$store.commit('changePassword', this.password)
      this.$store.dispatch('changePassword', this.password)
      
      this.$router.push('/') // 跳到首页
    }
  }

5)mutation必须同步执行。Action就不受约束。我们可以在action内部执行异步操作

 actions: {
      // ...
      changePassword (context, data) {
        setTimeout(() => {
          context.commit('changePassword', data)
        }, 1000)
      }
    }

Vuex之mapActions

1)前面已经说过mapState、mapGetters、mapMutations,让我们实践,修改Login.vue:

 methods: {
    ...mapActions([
      'changeLogin',
      'changeUsername',
      'changePassword'
    ]),
    LoginHandle () {
      // 表单验证
      if (!this.username || !this.password ) return;
      
      // 修改isLogin状态
      this.changeLogin(true);
      // 修改username状态
      this.changeUsername(this.username);
      // 修改password状态
      this.changePassword(this.password);
      
      this.$router.push('/') // 跳到首页
    }
  }

预览效果:
在这里插入图片描述

Delphi 12.3 作为一款面向 Windows 平台的集成开发环境,由 Embarcadero Technologies 负责其持续演进。该环境以 Object Pascal 语言为核心,并依托 Visual Component Library(VCL)框架,广泛应用于各类桌面软件、数据库系统及企业级解决方案的开发。在此生态中,Excel4Delphi 作为一个重要的社区开源项目,致力于搭建 Delphi 与 Microsoft Excel 之间的高效桥梁,使开发者能够在自研程序中直接调用 Excel 的文档处理、工作表管理、单元格操作及宏执行等功能。 该项目以库文件与组件包的形式提供,开发者将其集成至 Delphi 工程后,即可通过封装良好的接口实现对 Excel 的编程控制。具体功能涵盖创建与编辑工作簿、格式化单元格、批量导入导出数据,乃至执行内置公式与宏指令等高级操作。这一机制显著降低了在财务分析、报表自动生成、数据整理等场景中实现 Excel 功能集成的技术门槛,使开发者无需深入掌握 COM 编程或 Excel 底层 API 即可完成复杂任务。 使用 Excel4Delphi 需具备基础的 Delphi 编程知识,并对 Excel 对象模型有一定理解。实践中需注意不同 Excel 版本间的兼容性,并严格遵循项目文档进行环境配置与依赖部署。此外,操作过程中应遵循文件访问的最佳实践,例如确保目标文件未被独占锁定,并实施完整的异常处理机制,以防数据损毁或程序意外中断。 该项目的持续维护依赖于 Delphi 开发者社区的集体贡献,通过定期更新以适配新版开发环境与 Office 套件,并修复已发现的问题。对于需要深度融合 Excel 功能的 Delphi 应用而言,Excel4Delphi 提供了经过充分测试的可靠代码基础,使开发团队能更专注于业务逻辑与用户体验的优化,从而提升整体开发效率与软件质量。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值