仓库Vuex

news2024/11/26 20:43:27

1. 搭建vuex仓库

1.1 安装 

npm install vuex@next

1.2 引入 

创建store文件夹,里面创建index.js,该js文件中写:

import { createStore } from 'vuex'
// 引入子仓库
import model1 from "./model1.js"
import model2 from "./model2.js"
const store = createStore({
	modules:{
		  model1:model1,
		  model2:model2,
	}
})
export default store;

main.js文件中需要引入index.js:

import store from "./store/index.js";
const app = createApp(App);
// 将 store 实例作为插件安装
app.use(store);

 1.3 在各个子仓库中写代码

// 基本结构
export default {
	namespaced:true,
	state(){// 状态
		  return { }
	},
	getters:{ // 类似于计算属性,里面写函数,但当属性用} ,
	mutations:{   // 只能同步修改仓库中的state,需要提交载荷},
	actions:{   // 异步修改仓库中的state },
}

1.4 每个组件中的使用方式

<p>
    this.$store.state.model1.count // module1状态中的count
    this.$store.state.model2.count // module2状态中的count
    this.$store.commit("model1/countIncrement",100) => module1 的mutations
    this.$store.commit("model2/countIncrement",200) => module2 的mutations
    this.$store.getters["model1/mycount"] => module1 的getters
    this.$store.getters["model2/mycount"] => module2 的getters
    this.$store.dispatch("model1/changeArr",100) => module1 的actions
    this.$store.dispatch("model2/changeArr",200) => module2 的actions
</p>

介绍:vuex是为vue框架开发的状态管理模式

2 语法

2.1. state

我个人理解的是,类似于vue框架中的data,都是函数(设计成函数是为了给每个组件/仓库提供独立的数据),里面用来存放数据的。

使用——{{ $store.state.状态名 }}

访问——this.$store.state.状态名

从 store 实例中读取状态最简单的方法就是在计算属性computed中返回某个状态中的状态名。下面给一个简单案例来促进理解:

//App组件中
<template>
  <div>
    <h2>app组件</h2>
    <h3>state---使用-msg:{{ $store.state.msg }}-username:{{ $store.state.username }}---计算属性{{ msg }}---</h3>
  </div>
</template>
<script>
import { defineAsyncComponent } from 'vue'
export default {
  computed: {
    msg() {
      // 通过this访问
      return this.$store.state.msg
    },
 }
</script>

//Box组件中也可以使用
<h2>box组件</h2>
<p>{{ $store.state.msg }}</p>

2.2. getters

用来获取数据,类似于vue框架中的computed属性,里面写函数,当state中的数据改变时,就会自行调用这个函数。接下来给个计算年龄的案例来理解:

// index.js文件中
state() {
    return {
      birth: "1998-03-28",
    }
},
getters: {
  getage(state) {
    // state参数为state对象
    return new Date().getFullYear() - new Date(state.birth).getFullYear();
  },
}

// App组件中
<h3>getters---{{ $store.getters.getage }}--方法{{ getAge() }}</h3>
//script标签中
methods: {
  getAge() {
    return this.$store.getters.getage;
  },
}

通过上面案例会发现,通调用方法的形式也可以实现getters里面的getage函数的功能,那就是在getage方法中返回一个通过this.$store来访问store对象中的getters中的函数。

2.3. mutations——commit提交载荷

更改Vuex的store中state的唯一方法时提交mutation(同步修改)。一般载荷应该是一个对象,这样就可以在里面放置多个字段,使记录的mutation更可读。可以在mutations中提交荷载,也可以在组件中提交荷载。

在index.js中的mutations对象中设计方法,App组件中触发事件,然后提交载荷,这样mutations中的方法就可以接收到修改的数据,然后进行state的修改。给个简单案例来理解mutations。

// index.js中
  mutations: {
    change_birth(state, action) {
      //state中放的时整个state对象
      //action中放提交载荷提交过来的信息
      console.log(state, action);
      // 注:需要通过.value才能取到值
      state.birth = action.value;
    }
  }

// App组件中
<h3>mutations---birth-{{ $store.getters.change_birth }}</h3>
// 用来触发方法
<button @click="fn">app_btn</button>

methods: {
    getAge() {
      return this.$store.getters.getage;
    },
    fn() {
      // 提交载荷可以为对象形式,也可以为一个基本数据
      let action1 = { type: 'BIRTH', value: '1997-07-08' };
      // 组件中提交载荷为action1
      this.$store.commit('change_birth', action1);
    }
 }

2.4. actions——dispatch提交载荷

可以异步且间接地修改数据,因为它接收到组件传来的参数后,需要再次用commit提交载荷,然后通过mutations来修改仓库的state。跟上面的功能一样,只是采用dispatch来提交载荷。

设计:actions:{ 设计函数 } 函数得到的第一个参数为整个store对象

使用:this.$store.dispatch('上面设计的函数名' , 传参数可以是对象)

总结:mutations和actions的区别?

           1. mutations通过commit提交载荷来修改仓库的state;actions通过dispatch提交载荷来间接修改仓库的state;

            2. mutations中只能写同步的业务,actions可以写异步的业务,异步commit载荷到mutation中。

// App组件中
methods: {
    fn() {
       let action3 = {type:'ARR',value: '123456' };
       this.$store.dispatch("changeArr", { type: 'ARR', value: '123456' });
    }
}


// index.js中
  mutations: {
    ARR(state, action) {
      state.arr = action;
    },
  },
 actions: {
    changeArr(ctx, action) {
      // ctx参数是整个store对象
      // 提交载荷,上面ARR函数接收到提交的载荷
      store.commit("ARR", action);
    },
  },

2.5. model

小仓库,可以用来使用模块化开发,每个小仓库里面都有自己的state、getters、mutaions、actions。然后在index.js主文件中引入小仓库。

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

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

相关文章

行为型设计模式05-备忘录模式

&#x1f9d1;‍&#x1f4bb;作者&#xff1a;猫十二懿 ❤️‍&#x1f525;账号&#xff1a;CSDN 、掘金 、个人博客 、Github &#x1f389;公众号&#xff1a;猫十二懿 备忘录模式 1、备忘录模式介绍 备忘录模式是一种行为型设计模式&#xff0c;用于在不破坏封装性的前提…

Spring Resources资源操作

文章目录 1、Spring Resources概述2、Resource接口3、Resource的实现类3.1、UrlResource访问网络资源3.2、ClassPathResource 访问类路径下资源3.3、FileSystemResource 访问文件系统资源3.4、ServletContextResource3.5、InputStreamResource3.6、ByteArrayResource 4、Resour…

H桥级联型五电平三相逆变器MATLAB仿真模型

H桥级联型五电平逆变器MATLAB仿真模型资源-CSDN文库https://download.csdn.net/download/weixin_56691527/87899094 模型简介&#xff1a; MATLAB21b版本 逆变器采用H桥级联的形式连接&#xff0c;加设LCL滤波器&#xff0c;三相负载构成主电路。 采用SPWM调制&#xff0c;可…

不宜使用Selenium自动化的10个测试场景

尽管在很多情况下测试自动化是有意义的&#xff0c;但一些测试场景是不应该使用自动化测试工具的&#xff0c;比如Selenium、WebDriver。 下面有10个示例&#xff0c;来解释为什么自动化在这种情况下使用时没有意义的&#xff0c;我还将为您提供每种方法的替代方法。 01.验证…

TreeView 简单使用

本文主要介绍 QML 中 TreeView 的基本使用方法&#xff0c;包括&#xff1a;TreeView的适用场景&#xff1b; 控件简介 QML TreeView 是 Qt Quick 中的一个组件&#xff0c;用于显示树形结构的数据。它提供了一种以层次结构方式展示数据的方式&#xff0c;其中每个节点可以包含…

ESP32学习之定时器和PWM

一.定时器代码如下&#xff1a; #include <Arduino.h>hw_timer_t *timer NULL; int interruptCounter 0;// 函数名称&#xff1a;onTimer() // 函数功能&#xff1a;中断服务的功能&#xff0c;它必须是一个返回void&#xff08;空&#xff09;且没有输入参数的函数 //…

【动态规划】路径问题

冻龟算法系列之路径问题 文章目录 【动态规划】路径问题1. 不同路径1.1 题目解析1.2 算法原理1.2.1 状态表示1.2.2 状态转移方程1.2.3 初始化1.2.4 填表顺序1.2.5 返回值 1.3 编写代码 2. 不同路径Ⅱ2.1 题目解析2.2 算法原理2.2.1 状态表示2.2.2 状态转移方程2.2.3 初始化2.2.…

性能测试学习之数据驱动性能测试

了解数据驱动测试理念、能够如何在jmeter中用多种方式实现数据驱动测试。 知识点&#xff1a;字符串拼接、计数器、循环控制器 1. 数据驱动的理念 1.1 定义 从数据文件中读取测试数据,驱动测试过程的一-种测试方法数据驱动可以理解为更高级的参数化 1.2 特点 测试数据与测试…

【Linux】socket 编程(socket套接字介绍、字节序、socket地址、IP地址转换函数、套接字函数、TCP通信实现)

目录 1、socket套接字介绍2、字节序简介字节序转换函数 3、socket地址专用socket地址 4、IP地址转换函数5、套接字函数6、TCP通信实现&#xff08;服务器端和客户端&#xff09; 橙色 1、socket套接字介绍 所谓套接字&#xff0c;就是对网络中不同主机上的应用进程之间进行双…

深入理解深度学习——Transformer:整合编码器(Encoder)和解码器Decoder)

分类目录&#xff1a;《深入理解深度学习》总目录 相关文章&#xff1a; 注意力机制&#xff08;Attention Mechanism&#xff09;&#xff1a;基础知识 注意力机制&#xff08;Attention Mechanism&#xff09;&#xff1a;注意力汇聚与Nadaraya-Watson核回归 注意力机制&…

国内唯一可以在本地搭建Stable Diffusion WebUI教程-安装时无需魔法安装全程流畅到尖叫

Stable Diffusion是什么 Stable Diffusion简称SD是一款Ai图片生成工具。“输入几句话,生成精美图片。” 比如说我一开头这幅图片就是用的SD生成的。 我在我的“ChatGPT让我变成了“超人”-如何提升团队30%效能质量提高100%的阶段性总结报告”里提到过midjourney,但是midjou…

使用Google工具类Guava自定义一个@Limiter接口限流注解

在Springboot中引用RateLimiter工具类依赖 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.1-jre</version> </dependency> 需要注意的是&#xff0c;Guava 的不同版本可能会有…

新手第一次做性能测试?性能测试流程详全,从需求到报告一篇打通

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、确认需求 确定…

3、互联网行业及产品经理分类

上一篇文章&#xff1a;2、产品经理的工作内容_阿杰学编程的博客-CSDN博客 1、产品经理分类 我们把产品经理划分成这样两个大的类型&#xff0c;一个是传统行业的&#xff0c;一个是互联网行业的。这个简单了解一下就行。 这个里面会发现绝大多数也是体育劳动&#xff0c;你比…

软件测试岗位都是女孩子在做吗?

听我一朋友说&#xff0c;测试岗位基本都是女孩子做。” 不知道是不是以前“软件测试岗”给人印象是“不需要太多技术含量”的错觉&#xff0c;从而大部分外行认为从业软件测试的人员中女生应占了大多数。比如有人就觉得&#xff1a;软件测试主要是细心活&#xff0c;所以女生…

2023 年各大互联网公司常见面试题(Java 岗)汇总

很多人都说今年对于 IT 行业根本没有所谓的“金三银四”“金九银十”。在各大招聘网站或者软件上不管是大厂还是中小公司大多都是挂个招聘需求&#xff0c;实际并不招人&#xff1b;在行业内的程序员基本都已经感受到了任老前段时间口中所谓的“寒气”。 虽然事实确实是如此&a…

30个接口自动化测试面试题,赶紧收藏

1. 什么是接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试是指使用自动化工具对接口进行测试&#xff0c;验证接口的正确性、稳定性和性能等方面的指标。2. 为什么要进行接口自动化测试&#xff1f; 答&#xff1a;接口自动化测试可以提高测试效率&#xff0c;减少人…

新能源行业如何进行数据防泄漏

客户情况 某新能源电池企业专业从事于新能源锂离子动力电池和储能电池的研发、生产和销售&#xff0c;具备电芯、模组、BMS及Pack的完整资源开发能力。公司致力于通过持续不断地改进电池技术&#xff0c;为全球锂离子动力和储能领域提供数字化精准高效的新能源解决方案。 该企…

Nautilus Chain 主网上线在即,一文盘点该生态即将上线的项目

Nautilus Chain 是行业内第一个并行化&#xff0c;且运行速度最快 EVM Rollup 的L3扩容方案&#xff0c;作为首个模块化链&#xff0c;存储、计算、共识等都在不同的模块中&#xff0c;意味着其能够获得更高的可拓展性与扩容能力&#xff0c;并在Layer2的基础上进一步提升了网络…

SpringCloud Alibaba-Sentinel

SpringCloud Alibaba-Sentinel 1. Sentinel核心库1.1 Sentinel介绍1.2 Sentinel核心功能1.2.1 流量控制1.2.2 熔断降级 2 Sentinel 限流熔断降级2.1 SentinelResource定义资源2.1.1 blockHandler/blockHandlerClass2.1.2 fallback/fallbackClass2.1.3 defaultFallback 2.2 Sent…