vue2、vue3状态管理之vuex、pinia

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、状态管理之vuex
    • 1.1 State
    • 调用:
    • 1.2 Mutation
      • 在vuex中定义:
      • 在组件中使用:
    • 1.3 Action
      • 在vuex中定义:
        • 将上面的减法操作改为异步操作
      • 在组件中使用:
    • 1.4 Getter
    • 1.4 Modules
  • 二、状态管理之pinia
    • pinia文件
      • pinia->index.vue
      • pinia->child.vue / pinia->child1.vue组件
        • child.vue
        • child1.vue
    • modules文件
      • info.ts
      • todo.ts
  • 总结


前言

组件之间的传值一般有哪些?有父子组件通讯,兄弟组件通讯…但是传参对于多层嵌套就显得非常繁琐,代码维护也会非常麻烦。因此就把组件共享状态抽取出来以一个全局单例模式管理,把共享的数据函数放进状态管理中,任何组件都可以进行使用。


提示:以下是本篇文章正文内容,下面案例可供参考

一、状态管理之vuex

Vue2通常使用的状态管理工具是vuex,它有五个核心概念 State、Getter、Mutation 、Action、 Module

1.1 State

提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,与data有点类似

在vuex中state中定义数据,可以在任何组件中进行调用

import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({//数据,相当于datastate: {name:"张三",age:12,count:0},
})

调用:

调用的方法有好几种,这里只列举比较常用的方法

this.$store.state.全局数据名称

1.2 Mutation

更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的事件类型 (type)和一个回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受 state 作为第一个参数:

在vuex中定义:

其中参数state参数是必须的,也可以自己传递一个参数,如下代码,进行计数器的加减操作,加法操作时可以根据所传递参数大小进行相加,减法操作没有传参每次减一
在这里插入图片描述

在组件中使用:

定义两个按钮进行加减操作,并且使用commit触发Mutation操作

<template><div><button @click="btn">点我增加store仓库中的数据</button><button @click="btn1">点我减少store仓库中的数据</button></div>
</template>methods:{
//加法
btn(){
this.$store.commit("addcount",10)     //每次加十
}
//减法
btn1(){
this.$store.commit("reduce") 
}
}

1.3 Action

Action和Mutation相似,一般不用Mutation 异步操作,若要进行异步操作,使用Action

在vuex中定义:

将上面的减法操作改为异步操作

在这里插入图片描述

在组件中使用:

直接使用 dispatch触发Action函数

this.$store.dispatch("asynAdd")

1.4 Getter

类似于vue中的computed,进行缓存,对于Store中的数据进行加工处理形成新的数据

1.4 Modules

当遇见大型项目时,数据量大,store就会显得很臃肿为了解决以上问题,Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割:


二、状态管理之pinia

通常情况下在一个vue3项目中会创建一个store文件夹,项目比较大的时候数据量比较大,需要对状态管理数据进行分块管理。如下:
在这里插入图片描述
在这里插入图片描述

pinia文件

在这里插入图片描述

pinia->index.vue

<template><div class="box"><h1>pinia</h1><div class="container"><Child></Child><Child1></Child1></div></div>
</template><script setup lang="ts">
import Child from "./Child.vue";
import Child1 from "./Child1.vue";
//vuex:集中式管理状态容器,可以实现任意组件之间通信!!!
//核心概念:state、mutations、actions、getters、modules//pinia:集中式管理状态容器,可以实现任意组件之间通信!!!
//核心概念:state、actions、getters
//pinia写法:选择器API、组合式API
</script><style scoped>
.box {width: 600px;height: 400px;background: skyblue;
}
.container{display: flex;
}
</style>```## 2.1 State
>提供唯一的公共数据源,所有共享的数据统一放到store的state进行储存,与data有点类似在vuex中state中定义数据,可以在任何组件中进行调用```javascript
import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({//数据,相当于datastate: {name:"张三",age:12,count:0},
})

pinia->child.vue / pinia->child1.vue组件

child.vue
<template><div class="child"><h1>{{ infoStore.count }}---{{infoStore.total}}</h1><button @click="updateCount">点击我修改仓库数据</button></div>
</template><script setup lang="ts">
import useInfoStore from "../../store/modules/info";
//获取小仓库对象
let infoStore = useInfoStore();
console.log(infoStore);
//修改数据方法
const updateCount = () => {//仓库调用自身的方法去修改仓库的数据infoStore.updateNum(66,77);
};
</script><style scoped>
.child {width: 200px;height: 200px;background: yellowgreen;
}
</style>
child1.vue
<template><div class="child1">{{ infoStore.count }}<p @click="updateTodo">{{ todoStore.arr }}{{todoStore.total}}</p></div>
</template><script setup lang="ts">
import useInfoStore from "../../store/modules/info";
//获取小仓库对象
let infoStore = useInfoStore();//引入组合式API函数仓库
import useTodoStore from "../../store/modules/todo";
let todoStore = useTodoStore();//点击p段落去修改仓库的数据
const updateTodo = () => {todoStore.updateTodo();
};
</script><style scoped>
.child1 {width: 200px;height: 200px;background: hotpink;
}
</style>

modules文件

在这里插入图片描述

info.ts

//定义info小仓库
import { defineStore } from "pinia";
//第一个仓库:小仓库名字  第二个参数:小仓库配置对象
//defineStore方法执行会返回一个函数,函数作用就是让组件可以获取到仓库数据
let useInfoStore = defineStore("info", {//存储数据:statestate: () => {return {count: 99,arr: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]}},actions: {//注意:函数没有context上下文对象//没有commit、没有mutations去修改数据updateNum(a: number, b: number) {this.count += a;}},getters: {total() {let result:any = this.arr.reduce((prev: number, next: number) => {return prev + next;}, 0);return result;}}
});
//对外暴露方法
export default useInfoStore;

todo.ts

//定义组合式API仓库
import { defineStore } from "pinia";
import { ref, computed,watch} from 'vue';
//创建小仓库
let useTodoStore = defineStore('todo', () => {let todos = ref([{ id: 1, title: '吃饭' }, { id: 2, title: '睡觉' }, { id: 3, title: '打豆豆' }]);let arr = ref([1,2,3,4,5]);const total = computed(() => {return arr.value.reduce((prev, next) => {return prev + next;}, 0)})//务必要返回一个对象:属性与方法可以提供给组件使用return {todos,arr,total,updateTodo() {todos.value.push({ id: 4, title: '组合式API方法' });}}
});export default useTodoStore;

总结

提示:这里对文章进行总结:

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

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

相关文章

性能测试-jemeter:安装 / 基础使用

一、理解jemeter 官网-Apache JMeter-Apache JMeter™ JMeter是一款开源的性能测试工具&#xff0c;主要用于模拟大量用户并发访问目标服务器&#xff0c;以评估服务器的性能和稳定性。 JMeter可以执行以下任务序号用途描述1性能测试通过模拟多个用户在同一时间对服务器进行…

【Graylog】通过Pipelines在Graylog生成IP地理位置信息

序 在当今数字化时代&#xff0c;随着网络攻击的不断增加和全球化的用户活动&#xff0c;了解IP地址的地理位置信息变得越来越重要。对于网络安全和营销策略来说&#xff0c;掌握IP地址的地理信息可以带来许多好处。 接下里将介绍如何通过Graylog的Pipelines功能&#xff0c;…

linux开放tomcat 8080端口

1、查看8080是否开放 firewall-cmd --query-port8080/tcp查看已开启的端口 firewall-cmd --list-ports开启防火墙 systemctl start firewalld2、永久开放8080端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent3、重加载&#xff08;重启防火墙&#xff09; …

如何开发一个类似美团小程序商家入驻

上线类似美团的小程序可以推动商业生态系统的优化和升级。小程序可以连接商家、用户和平台&#xff0c;促进信息流通和交易&#xff0c;提高整个生态系统的效率和效益。今天&#xff0c;我们分享如何开发一个类似美团小程序商家入驻的平台。大家点个关注点个赞&#xff0c;我们…

本地登陆页面:对本地搜索词进行排名的策略

位置着陆页没有得到足够的尊重。 你用你的姓名、地址、电话号码和工作时间来设置它们。也许您嵌入了用于行车路线的 Google 地图。 也许你写了一些没人会读的副本&#xff0c;如果你有多个位置&#xff0c;你在每一页上重复相同的副本&#xff0c;只是更改位置名称。 如果你…

408数据结构错题知识点拾遗

个人向错题相关部分整理&#xff0c;涵盖真题、模拟、课后习题等。 408相关&#xff1a; 408数据结构错题知识点拾遗 408数据结构常考算法基础训练等待完善 408计算机组成原理错题知识点拾遗408操作系统错题知识点拾遗等待完善408计算机网络错题知识点拾遗 408计算机网络各层协…

DRF从入门到精通五(路由组件、认证组件、权限组件、频率组件及认证、权限源码分析)

文章目录 一、路由组件REST framework提供了两个routeraction装饰器 二、认证组件(Authentication)三、权限组件(Permissions)内置权限类 四、频率组件(Throttling)五、权限组件源码分析六、认证组件源码分析 一、路由组件 对于视图集ViewSetMixin&#xff0c;我们除了可以自己…

JavaWeb的Servlet的入门和使用方法

1 什么是Servlet Servlet是Server Applet的简称&#xff0c;是用Java编写的是运行在 Web 服务器上的程序&#xff0c;它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet&#xff0c;可以收集来自网页表单的用户输…

Elasticsearch:无需搜索 “Christmas” 即可找到有关圣诞节的书籍

随着假期的临近&#xff0c;我期待着变得舒适&#xff0c;拿起一本新书&#xff0c;享受轻松的时光。 但是使用搜索栏在线发现图书并不像看起来那么容易......大多数零售搜索引擎仅依赖于关键字搜索&#xff0c;当我们确切地知道我们正在寻找什么书名时&#xff0c;这很好&…

Servlet见解2

4 创建servlet的三种方式 4.1 实现Servlet接口的方式 import javax.servlet.*; import javax.servlet.annotation.WebServlet; import java.io.IOException;WebServlet("/test1") public class Servlet1 implements Servlet {Overridepublic void init(ServletConf…

【前端技术】Vite vs Webpack

✨专栏介绍 在当今数字化时代&#xff0c;Web应用程序已经成为了人们生活和工作中不可或缺的一部分。而要构建出令人印象深刻且功能强大的Web应用程序&#xff0c;就需要掌握一系列前端技术。前端技术涵盖了HTML、CSS和JavaScript等核心技术&#xff0c;以及各种框架、库和工具…

克魔助手工具下载、注册和登录指南

下载安装克魔助手 摘要 本文介绍了如何下载安装克魔助手工具&#xff0c;以及注册和登录流程。通过简单的步骤&#xff0c;用户可以轻松获取并使用该工具&#xff0c;为后续的手机应用管理操作做好准备。 引言 克魔助手是一款免费的手机管理工具&#xff0c;通过该工具用户…

Python实现张万森下雪了的效果

写在前面 即将步入婚宴殿堂的女主林北星&#xff0c;遭遇了男友展宇的毁约&#xff0c;生活和工作也变得一团糟。与此同时&#xff0c;她被时光老人带回了十八岁的高三时光&#xff0c;重新开启了自己的人生。林北星摆脱了展宇的束缚&#xff0c;认真准备高考&#xff0c;想要…

同城配送小程序解决方案

前言 同城配送小程序解决方案。 一、用户用车 用户打开小程序后发货地址自动定位到用户当前位置&#xff0c;用户可通过地址后的>号在地图上选择新的发货地址和卸货地址&#xff0c;小程序会自动规划出行线路&#xff0c;计算距离和运费价格。 用户仅用简单操作后就可以…

w16php系列之基础数组

一、索引数组 概念 索引数组 是指键名为整数的数组。默认情况下&#xff0c;索引数组的键名是从0开始&#xff0c;并依次递增。它主要适用于利用位置&#xff08;0、1、2……&#xff09;来标识数组元素的情况。另外&#xff0c;索引数组的键名也可以自己指定 示例代码 <…

讲座思考 | 周志华教授:新型机器学习神经元模型的探索

12月22日&#xff0c;有幸听了南京大学周志华教授题为“新型机器学习神经元模型的探索”的讲座。现场热闹非凡&#xff0c;大家像追星一样拿着“西瓜书”找周教授签名。周教授讲得依旧循循善诱&#xff0c;由浅入深&#xff0c;听得我很入迷&#xff0c;故作此记。 周教授首先就…

RocketMQ系统性学习-RocketMQ高级特性之消息大量堆积处理、部署架构和高可用机制

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 【11来了】文章导读地址&#xff1a;点击查看文章导读&#xff01; &#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f341;&#x1f3…

kasan

目录 主要参考文章&#xff1a;linux之kasan原理及解析-CSDN博客 kasn大致原理 shadow memory映射建立 kasn检查代码具体实现 kasn大致原理 之前使用slub debug定位重复释放&#xff0c;内存越界等问题时比较麻烦。无法对异常行为进行实时捕捉。看网上说kasan能做到这一点…

etcd-workbench一款免费好用的ETCD客户端,支持SSHTunnel、版本对比等功能

介绍 今天推荐一款完全免费的ETCD客户端&#xff0c;可以私有化部署: etcd-workbench 开源地址&#xff1a;https://github.com/tzfun/etcd-workbench Gitee地址&#xff1a;https://gitee.com/tzfun/etcd-workbench 下载 本地运行 从 官方Release 下载最新版的 jar 包&am…

【FPGA】分享一些FPGA视频图像处理相关的书籍

在做FPGA工程师的这些年&#xff0c;买过好多书&#xff0c;也看过好多书&#xff0c;分享一下。 后续会慢慢的补充书评。 【FPGA】分享一些FPGA入门学习的书籍【FPGA】分享一些FPGA协同MATLAB开发的书籍 【FPGA】分享一些FPGA视频图像处理相关的书籍 【FPGA】分享一些FPGA高速…