vue的action与mutation 的区别

devtools/2024/10/21 10:08:44/

在 Vue.js 的状态管理库 Vuex 中,mutations 和 actions 都是用于更改状态的方法,但它们之间存在一些重要的区别。下面我将通过举例来说明这些区别:

1. 基本定义
mutations:用于直接修改状态(state)。它们是同步函数。
actions:用于提交 mutations,而不是直接修改状态。它们可以包含任意异步操作。


2. 示例

假设我们有一个简单的购物车应用,其中有一个状态 cartItems 表示购物车中的商品。

mutations 示例
javascript
mutations: {
  ADD_TO_CART(state, item) {
    // 直接修改状态
    state.cartItems.push(item);
  }
}

actions 示例
javascript
actions: {
  async addToCart({ commit }, item) {
    // 模拟异步操作,例如从服务器获取商品信息
    const itemDetails = await fetchItemDetails(item.id);
    
    // 提交 mutation 来修改状态
    commit('ADD_TO_CART', { ...item, ...itemDetails });
  }
}

3. 主要区别
同步与异步:mutations 是同步的,这意味着它们会立即修改状态。而 actions 可以包含异步操作,例如 API 调用,然后在异步操作完成后提交一个 mutation。
直接修改状态:mutations 直接修改状态。而 actions 不直接修改状态,而是通过提交 mutation 来修改状态。
类型检查:在 Vuex 的严格模式下,mutations 的类型(即它们的名称)会被检查,以确保它们没有被意外地调用。而 actions 的类型则不会被这样检查。
4. 使用场景
当你需要直接、同步地修改状态时,使用 mutations。
当你需要进行异步操作或需要封装一些复杂的逻辑(例如错误处理、日志记录等)时,使用 actions。

通过上面的例子和解释,希望你能更清晰地理解 Vuex 中 mutations 和 actions 的区别及其使用场景。

 


http://www.ppmy.cn/devtools/32238.html

相关文章

【再探】设计模式—抽象工厂及建造者模式

抽象工厂模式和建造者模式都属于创建型模式。两者都能创建对应的对象,而创建者模式更侧重于创建复杂对象,将对象的创建过程封装起来,让客户端不需要知道对象的内部细节。 1 抽象工厂模式 需求: 在使用工厂方法模式时&#xff0…

2013NOIP普及组真题 4. 车站分级

线上OJ: 一本通:http://ybt.ssoier.cn:8088/problem_show.php?pid1964 核心思想: 1、原文中提到 “如果这趟车次停靠了火车站 x,则始发站、终点站之间所有级别大于等于火车站 x 的都必须停靠”,如果设停靠站为A&…

《Beginning C++20 From Novice to Professional》第七章Working with Strings

字符串处理是非常令人关注的领域,因为大部分情况下我们的程序不是在处理数字而是在处理字符串,对于字符串的表示和操作成为编程语言中非常重要的一部分 书里也强调C中对于字符串的处理要好过C风格的char数组,更高效也更安全 本章我们可以学…

Matlab : unique函数的用法

unique是MATLAB中一个非常实用的函数,用于找出数组中的唯一值。它有几种不同的用法,可以根据需要选择合适的参数来控制输出的行为。以下是unique函数的基本用法和一些常见参数的介绍: 基本语法: C unique(A) [C,IA,IC] unique…

ATTCK的优缺点分别是什么

ATT&CK(Adversarial Tactics, Techniques, and Common Knowledge)框架是一个广泛使用的资源,它提供了对网络威胁的深入洞察,特别是关于攻击者可能采取的战术、技术和程序(TTPs)。以下是ATT&CK框架的优缺点: 优点: 全面的威胁情报:ATT&CK框架详细描述了各种…

redis集群的创建安装与配置,以及维护

一、redis集群配置 port 7000 cluster-enabled yes cluster-config-file nodes.conf cluster-node-timeout 5000 appendonly yes 二、安装ruby(ruby可以充当redis客户端的角色) yum -y install ruby ruby-devel rubygems rpm-build gem install …

Big Data 平障录

Hive Hive 生成带压缩的格式,需要如此设置 SET parquet.compressionSNAPPY;yarn.scheduler.fair.assignmultiple 相关jira:https://issues.apache.org/jira/browse/YARN-5035 yarn.scheduler.fair.assignmultiple是YARN Fair Scheduler的一个配置参数…

人大金仓数据库的数据库系统的技术架构

人大金仓数据库作为中国社会科学院经济研究所主办的重要数据库平台,其数据库系统技术架构设计合理、稳定高效,为用户提供了丰富的数据资源和强大的数据分析功能。下面我将详细介绍人大金仓数据库的数据库系统技术架构。 1. 数据库系统概述 人大金仓数据…