Vuex 的核心概念:State, Mutations, Actions, Getters

Vuex 的核心概念:State, Mutations, Actions, Getters

Vuex 是 Vue.js 的官方状态管理库,提供了集中式的状态管理机制。它的核心概念包括 State(状态)、Mutations(变更)、Actions(动作)和 Getters(获取器)。以下是对这些概念的详细介绍及相应的代码示例。

State(状态)

State 是存储应用共享状态的地方。在 Vuex 中,State 是一个对象,包含应用中需要共享的所有数据。组件可以从 store 中读取状态,当状态发生变化时,依赖这些状态的组件会自动更新。

示例:

// store.js
import { createStore } from 'vuex';const store = createStore({state() {return {count: 0,todos: [{ id: 1, text: 'Learn Vuex', done: true },{ id: 2, text: 'Build a project', done: false },],};},
});export default store;

在组件中访问 state:

// MyComponent.vue
<template><div><p>Count: {{ count }}</p><ul><li v-for="todo in todos" :key="todo.id">{{ todo.text }} - {{ todo.done ? 'Done' : 'Pending' }}</li></ul></div>
</template><script>
import { mapState } from 'vuex';export default {computed: {...mapState(['count', 'todos']),},
};
</script>

Mutations(变更)

Mutations 是更改 Vuex 中 state 的唯一方法。每个 mutation 都有一个字符串的事件类型(type)和一个回调函数(handler)。回调函数接收 state 作为第一个参数,可以直接修改 state。需要注意的是,mutations 必须是同步函数。

示例:

// store.js
const store = createStore({state() {return {count: 0,};},mutations: {increment(state) {state.count++;},decrement(state) {state.count--;},},
});

在组件中提交 mutation:

// MyComponent.vue
<template><div><p>Count: {{ count }}</p><button @click="increment">Increment</button><button @click="decrement">Decrement</button></div>
</template><script>
import { mapState } from 'vuex';export default {computed: {...mapState(['count']),},methods: {increment() {this.$store.commit('increment');},decrement() {this.$store.commit('decrement');},},
};
</script>

Actions(动作)

Actions 类似于 mutations,不同之处在于:

  • Action 提交的是 mutation,而不是直接变更状态。
  • Action 可以包含任意异步操作。

示例:

// store.js
const store = createStore({state() {return {count: 0,};},mutations: {increment(state) {state.count++;},},actions: {incrementAsync({ commit }) {setTimeout(() => {commit('increment');}, 1000);},},
});

在组件中分发 action:

// MyComponent.vue
<template><div><p>Count: {{ count }}</p><button @click="incrementAsync">Increment Async</button></div>
</template><script>
import { mapState } from 'vuex';export default {computed: {...mapState(['count']),},methods: {incrementAsync() {this.$store.dispatch('incrementAsync');},},
};
</script>

在上述示例中,incrementAsync action 等待 1 秒后提交 increment mutation,从而异步地增加计数器的值。

Getters(获取器)

Getters 类似于组件的计算属性,用于从 state 中派生出一些状态。它们可以对 state 进行处理并返回结果,且结果会被缓存,只有当相关的 state 发生变化时才会重新计算。

示例:

// store.js
const store = createStore({state() {return {todos: [{ id: 1, text: 'Learn Vuex', done: true },{ id: 2, text: 'Build a project', done: false },],};},getters: {doneTodos: (state) => {return state.todos.filter((todo) => todo.done);},doneTodosCount: (state, getters) => {return getters.doneTodos.length;},},
});

在组件中访问 getters:

// MyComponent.vue
<template><div><p>Done Todos Count: {{ doneTodosCount }}</p><ul><li v-for="todo in doneTodos" :key="todo.id">{{ todo.text }}</li></ul></div>
</template><script>
import { mapGetters } from 'vuex';export default {computed: {...mapGetters(['doneTodos', 'doneTodosCount']),},
};
</script>

在上述示例中,doneTodos getter 返回已完成的待办事项列表,doneTodosCount getter 返回已完成的待办事项数量。

通过合理地使用 Vuex 的这些核心概念,可以使 Vue.js 应用的状态管理更加清晰、可维护和可预测。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/69264.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1.23 补题 寒假训练营

E 一起走很长的路&#xff01; 输入描述 第一行输入两个整数 n,q&#xff08;1≤n,q≤210^5&#xff09;&#xff0c;代表多米诺骨牌的个数和询问次数。 第二行输入 n 个整数 a1,a2,…,an​&#xff08;1≤ai≤10^9&#xff09;&#xff0c;表示多米诺骨牌的重量。 此后输入…

自定义数据集使用框架的线性回归方法对其进行拟合

代码 import torch import numpy as np import torch.nn as nncriterion nn.MSELoss()data np.array([[-0.5, 7.7],[1.8, 98.5],[0.9, 57.8],[0.4, 39.2],[-1.4, -15.7],[-1.4, -37.3],[-1.8, -49.1],[1.5, 75.6],[0.4, 34.0],[0.8, 62.3]])x_data data[:, 0] y_data data…

数据库-MySQL-事务-事务隔离级别的可重复读是如何实现的?

MySQL 事务隔离级别中的“可重复读”&#xff08;Repeatable Read&#xff09;是如何实现的 在MySQL中&#xff0c;可重复读&#xff08;Repeatable Read&#xff09;是默认的事务隔离级别&#xff0c;特别是在使用InnoDB存储引擎时。这个隔离级别通过多版本并发控制&#xff…

DDD架构实战第七讲总结:分层模型和代码组织

云架构师系列课程之DDD架构实战第七讲总结:分层模型和代码组织 一、引言 在前几讲中,我们介绍了领域驱动设计(DDD)的基本构造块和生命周期模型中的聚合。本讲将重点讨论如何将这些构造块和代码组织起来,探讨分层架构和六边形模型,以及如何组织代码结构。 二、工厂和资…

【中间件快速入门】什么是Redis

现在后端开发会用到各种中间件&#xff0c;一不留神项目可能在哪天就要用到一个我们之前可能听过但是从来没接触过的中间件&#xff0c;这个时候对于开发人员来说&#xff0c;如果你不知道这个中间件的设计逻辑和使用方法&#xff0c;那在后面的开发和维护工作中可能就会比较吃…

使用Python和Qt6创建GUI应用程序--前言

如果想用Python开发GUI应用程序&#xff0c;要从知道哪里是难点和棘手开始。有很多新的概念需要了解和学习&#xff0c;以获得和学习到可以展开工作所需要的东西。但是&#xff0c;像以往在编码所遇到的问题一样&#xff0c;第一步是学习如何处理以正确的方式解决问题。在这本书…

金晟新能源由盈转亏:毛利率下滑产能利用率不佳,关联交易持续增加

《港湾商业观察》黄懿 近期&#xff0c;广东金晟新能源股份有限公司&#xff08;下称“金晟新能源”&#xff09;递交了招股书&#xff0c;拟冲刺港交所IPO&#xff0c;中金公司、招银国际为联席保荐人。 金晟新能源处于电池回收的新兴大势行业&#xff0c;但是&#xff0c;受…

RTMP|RTSP播放器只解码视频关键帧功能探讨

技术背景 我们在做RTMP|RTSP直播播放器的时候&#xff0c;遇到过这样的技术诉求&#xff0c;在一些特定的应用场景中&#xff0c;可能只需要关键帧的信息&#xff0c;例如视频内容分析系统&#xff0c;可能只对关键帧进行分析&#xff0c;以提取特征、检测对象或场景变化。鉴于…

Spring Boot 集成 WebClient 实战教程 实现同步、异步请求处理以及响应式编程、响应式流、响应式Mono

该项目介绍springboot集成WebClient 实现服务的请求操作 示例中演示了,如何配置WebClient的请求头,请求参数等相关参数,实现同步、异步请求处理以及响应式编程、响应式流、响应式Mono。 为什么使用WebClient 不用RestTemplate 在 Spring Framework 5.0 及更高版本中,Res…

统计学中的样本概率论中的样本

不知道当初谁想的把概率论和数理统计合并&#xff0c;作为一门课。这本身是可以合并&#xff0c;完整的一条线&#xff0c;看这里。但是&#xff0c;作为任课老师应该从整体上交代清楚&#xff0c;毕竟是两个学科&#xff0c;不同的学科合并必然会有各种不协调的问题。 举个最…

2K高刷电竞显示器怎么选?

2K高刷电竞显示器怎么选&#xff1f;哪个价格适合你&#xff1f;哪个配置适合你呢&#xff1f; 1.HKC G27H2Pro - 2K高刷电竞显示器怎么选 外观设计 - HKC G27H2Pro 2K高刷电竞显示器 电竞风拉满&#xff1a;作为猎鹰系列的一员&#xff0c;背部 “鹰翼图腾” 切割线搭配炎红…

STM32-时钟树

STM32-时钟树 时钟 时钟

基于SpringBoot+WebSocket的前后端连接,并接入文心一言大模型API

前言&#xff1a; 本片博客只讲述了操作的大致流程&#xff0c;具体实现步骤并不标准&#xff0c;请以参考为准。 本文前提&#xff1a;熟悉使用webSocket 如果大家还不了解什么是WebSocket&#xff0c;可以参考我的这篇博客&#xff1a; rWebSocket 详解&#xff1a;全双工…

技术速递|.NET 9 中的 OpenAPI 文档生成

作者&#xff1a;Mike Kistler 排版&#xff1a;Alan Wang .NET 9 中的 ASP.NET Core 通过引入全新的对 OpenAPI 文档生成功能的内置支持&#xff0c;简化了为 API 端点创建 OpenAPI 文档的过程。这项新功能旨在简化开发工作流程&#xff0c;并改善 OpenAPI 定义在 ASP.NET 应用…

StarRocks BE源码编译、CLion高亮跳转方法

阅读SR BE源码时&#xff0c;很多类的引用位置爆红找不到&#xff0c;或无法跳转过去&#xff0c;而自己的Linux机器往往缺乏各种C依赖库&#xff0c;配置安装比较麻烦&#xff0c;因此总体的思路是通过CLion远程连接SR社区已经安装完各种依赖库的Docker容器&#xff0c;进行编…

STM32 按键密码系统的实现

本次基于STM32F407开发板&#xff0c;来实现密码系统&#xff0c;输入四位密码&#xff0c;密码正确时LED1亮&#xff0c;密码错误时四个LED灯双闪。 LED双闪代码 简单的逻辑&#xff0c;让四个LED灯先亮然后再延时一会LED灯灭&#xff0c;循环4此实现双闪的效果。 按键密码的…

linux常用加固方式

目录 一.系统加固 二.ssh加固 三.换个隐蔽的端口 四.防火墙配置 五.用户权限管理 六.暴力破解防护 七.病毒防护 八.磁盘加密 九.双因素认证2FA 十.日志监控 十一.精简服务 一.系统加固 第一步&#xff1a;打好系统补丁 sudo apt update && sudo apt upgra…

hadoop==docker desktop搭建hadoop

hdfs map readuce yarn https://medium.com/guillermovc/setting-up-hadoop-with-docker-and-using-mapreduce-framework-c1cd125d4f7b 清理资源 docker-compose down docker system prune -f

【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置(单机)

Elasticsearch系列文章目录 【Elasticsearch 基础入门】一文带你了解Elasticsearch&#xff01;&#xff01;&#xff01;【Elasticsearch 基础入门】Centos7下Elasticsearch 7.x安装与配置&#xff08;单机&#xff09; 目录 Elasticsearch系列文章目录前言单机模式1. 安装 J…