Vue的状态管理Pinia

文章目录

  • 一、介绍
  • 二、install
  • 三、store
    • 1、创建并全局引入
    • 2、使用


  • 本人最近在找工作,有推荐的小伙伴私我,不胜感激。

一、介绍

  • 官网:https://pinia.web3doc.top/introduction.html
  • Pinia 是 Vue 官方团队开发的一个全新状态管理库
  • Vue2和Vue3都可以使用
  • 去除了mutations,简化了状态管理的使用
  • 支持TS,Vuex对TS的语法支持不是完整的
  • 去除了命名空间模块,鉴于 Store 的扁平架构,“命名空间” Store 是其定义方式所固有的,因为每个store都会有唯一的store id

二、install

pnpm install pinia --save

三、store

1、创建并全局引入

  • 创建src/store/index.ts

  • main.ts中全局注册

// 引入pinia
import { createPinia } from 'pinia'// 挂载到vue根实例
createApp(App).use(createPinia)

2、使用

  1. index.js
import {defineStore} from 'pinia'/*** 创建第1个store** userStore:容器名称* user:store的id,必须唯一*/
export const userStore = defineStore('user', {state: () => {return {user: {name: 'kimi',age: 18,honor: ['1-三好学生','1-优秀班干部','2-优秀班干部']}}},//普通函数的写法时,函数中的this代表该storegetters: {/*** 使用store** @param store* @returns*/getUserHonorNum: (store) => {return store.user.honor.length},/*** 使用本store的getters** @param store* @returns*/getUserAvgHonorNum: (store) => {return store.getUserHonorNum / 3},/*** 传入自定义参数** @param store* @returns*/getUserAvgHonorNumber: (store) => {return (year) => {return store.getUserHonorNum / year}},/*** 访问其它store中的getters** @param store* @returns*/getAppNum: (store) => {//导入其它storeconst otherStore = appStore()return otherStore.num}},//actions书写格式和methods一样,因为他不会传入任何默认参数//普通函数的写法时,函数中的this代表该storeactions: {/*** 年龄+1,异步操作,2秒之后再执行*/setAgeIncrement() {setTimeout(() => {this.user.age++}, 2000)},/*** 传入自定义参数 - 单个** @param age*/setAge(age) {this.user.age = age},/*** 传入自定义参数 - 多个** @param name* @param age*/setUser(name, age) {this.$patch((state) => {state.user.name = namestate.user.age = age})}}
})/*** 创建第2个store*/
export const appStore = defineStore('app', {state: () => {return {num: 5}},getters: {},actions: {}
})
  1. 组件中使用
<script setup>
import { storeToRefs } from 'pinia'
import {userStore} from '@/store/index'//1、state
//访问state
userStoreData.user//就像setup 中的props 一样,我们不能对其进行解构,因为它会破坏响应式
const { user } = userStoreData//为了从 Store 中提取属性同时保持其响应式,可以使用pinia的storeToRefs(), 它将为任何响应式属性创建refs
const { user } = storeToRefs(userStoreData)//直接修改state中的共享状态
userStoreData.user.age++//批量修改state中的共享状态,通过调用 $patch 方法
userStoreData.$patch((state) => {state.user.name = 'sally'state.user.age++
})//通过调用store上的$reset()方法将状态重置到其初始值
userStoreData.$reset()//订阅状态,与常规的 watch() 相比,使用 $subscribe() 的优点是 subscriptions 只会在 patches 之后触发一次
userStoreData.$subscribe((mutation, state) => {/*打印一下mutation{//类型type: 'direct'、'patch object'、'patch function',//store的id,创建store的第一个参数storeId: 'user',events:{......}}*/
})//2、getters
userStoreData.getUserHonorNum
userStoreData.getUserAvgHonorNum
userStoreData.getUserAvgHonorNumber(3)//传入自定义参数
userStoreData.getAppNum//3、actions
userStoreData.setAgeIncrement()
userStoreData.setAge(20)//传入自定义参数 - 单个
userStoreData.setUser('sally',25)//传入自定义参数 - 多个
</script>

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

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

相关文章

SELINUX导致的网络服务问题解决

第一&#xff1a;开启相关服务&#xff0c;监控SELINUX 相关服务&#xff1a;setroubleshoot,auditd,大多数都是以se开头的 如果没有此服务&#xff0c;先yum下&#xff0c;然后查看状态 这里关于auditd说明&#xff0c;centos7不可以用systemctl重启auditd服务&#xff0c;…

C#-正则表达式

1.C#功能点&#xff1a; 验证格式&#xff1a;通过正则表达式&#xff0c;我们可以检查一个字符串是否符合特定的格式要求&#xff0c;例如验证邮箱、电话号码、身份证号码等。 查找和提取&#xff1a;我们可以使用正则表达式来查找字符串中符合特定模式的部分&#xff0c;并将…

深入了解Matplotlib中的子图创建方法

深入了解Matplotlib中的子图创建方法 一 add_axes( **kwargs):1.1 函数介绍1.2 示例一 创建第一张子图1.2 示例二 polar参数的运用1.3 示例三 创建多张子图 二 add_subplot(*args, **kwargs):2.1 函数介绍2.2 示例一 三 两种方法的区别3.1 参数形式3.2 布局灵活性3.3 适用场景3…

美化背景(拼图小游戏)

package Puzzlegame.com.wxj.ui;import javax.swing.*; import javax.swing.border.BevelBorder; import java.util.Random;public class GameJframe extends JFrame { //游戏主界面 //创建一个二维数组//目的&#xff1a;管理数据//加载图片的时候&#xff0c;会根据二维数组中…

ECRS软件:引领企业走向精益制造的未来

随着科技的快速发展和市场竞争的不断加剧&#xff0c;制造业正面临着前所未有的挑战和机遇。为了在激烈的市场竞争中立于不败之地&#xff0c;越来越多的企业开始寻求转型和升级&#xff0c;精益制造成为了一个备受关注的方向。而在这个过程中&#xff0c;ECRS软件以其独特的作…

vue组件通信方式 provide-inject

Vue提供了一种无需父组件显式传递 props 就能子组件之间共享数据的机制&#xff0c;即provide和inject选项。祖先组件通过provide选项来提供变量&#xff0c;而后代组件则通过inject选项来接收这些变量。这种方法主要用来提供一些通用的数据&#xff0c;如主题、配置信息等&…

linux 主机无法联网问题

主机不能联网 一 查看当前ip ping路由 ifconfig wlan0 wlan0: flags4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 192.168.2.78 netmask 255.255.255.0 broadcast 192.168.2.255ping 192.168.2.1查看是否能ping通 二 查看路由表 route -n Destination G…

【C++】对外接口封装以及导出动态链接库DLL

VS 使用C编写对外接口并封装成DLL 一、接口的封装二、VS设置三、查看生成的DLL接口 一、接口的封装 首先创建头文件&#xff0c;包含我们所依赖的库的头文件名称&#xff0c;并且申明我们要对外封装的接口名称&#xff0c;示例&#xff1a; 头文件&#xff1a; #pragma once …

CSAPP shelllab

CSAPP shell lab shell lab 的目标 实现shell 功能&#xff0c;包括解析命令&#xff0c;调用可执行文件和内置命令&#xff0c;(quit, jobs,fg, 和bg)。实现job控制和signal handler。 shell 介绍 Shell中的作业&#xff08;job&#xff09;管理是一种用于跟踪和控制正在运…

2023年:个人年度成长与团队协作成就

文章目录 个人职业发展的喜悦团队成就的辉煌公众号CSDN申请了移动安全领域新星创作者获得6月城市之星北京TOP 10获得23年博客之星TOP 41年度总结 知识星球 开拓新领域的决心免费知识大陆付费知识大陆 展望未来福利时间知识星球会员一年知识星球立减88券 在这个充满挑战与机遇的…

(2)(2.9) Holybro Microhard P900无线电遥测设备

文章目录 前言 1 特点 2 规格 3 包装内包括 前言 Holybro Microhard Radio 集成了 microhard Pico 系列射频模块&#xff0c;能够在强大的拓扑结构中提供高性能无线串行通信&#xff0c;如点对点、点对多点和安全 Mesh&#xff08;P840 不提供 Mesh&#xff09;。 它采用跳…

SQL注入的剩余类型

除了联合查询注入&#xff0c;报错注入&#xff0c;盲注注入 sql注入还有以下几类&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9;&#x1f9b9; 开始填坑 1.UA注入 原理&#xff1a;有些网站会把用户的UA信息写入数据库&#xff0c;用来收集和统计用户…

【技术分享】Ubuntu 20.04如何更改用户名

产品简介 本文适用于所有RK3568/RK3588平台产品在Ubuntu 20.04系统上如何更改用户名&#xff0c;本文以IDO-EVB3588开发板为例&#xff0c;在ubuntu20.04系统上修改用户名industio为usernew。 IDO-EVB3588开发板是一款基于RK3588平台的产品。该开发板集成了四核Cortex-A76和四…

扫描电子显微镜电子束辐射损伤和如何减轻

扫描电镜&#xff08;Scanning Electron Microscope, SEM&#xff09;是一种常用的材料表征技术&#xff0c;它通过聚焦电子束扫描样品表面&#xff0c;利用电子与样品相互作用产生的信号来获得高分辨率的形貌图像。然而&#xff0c;电子束的辐射可能会对样品造成损伤&#xff…

Qt6入门教程 13:QPushButton

目录 一.QPushButton 1.多选 2.互斥 3.设置菜单 4.图标按钮 4.1给按钮添加图标 4.2异形按钮 二.设置Qt样式表 一.QPushButton QPushButton是与QAbstractButton最接近的完全体按钮&#xff0c;它具备QAbstractButton的所有特性&#xff0c;并且支持设置菜单。 1.多选 …

2024幻兽帕鲁服务器,阿里云配置

阿里云幻兽帕鲁服务器Palworld服务器推荐4核16G配置&#xff0c;可以选择通用型g7实例或通用算力型u1实例&#xff0c;ECS通用型g7实例4核16G配置价格是502.32元一个月&#xff0c;算力型u1实例4核16G是432.0元/月&#xff0c;经济型e实例是共享型云服务器&#xff0c;价格是32…

docker容器运维命令

文章目录 docker psdocker execdocker inspectdocker topdocker attachdocker waitdocker exportdocker importdocker portdocker cpdocker diffdocker renamedocker statsdocker update总结 docker ps 列出容器。 docker ps [OPTIONS]OPTIONS说明&#xff1a; -a :显示所有的…

Python列表中的append功能及用法举例

Python列表中的append功能及用法举例 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333;append()&#x1f333;&#x1f340;功能介绍&#x1f340;&#x1f340;语法&#x1f340;&#x1f340;示例&#x1f340;&#x1f340;注意事项&#x…

总结NB-IoT模块和单片机的区别

在学习了NB-IoT模块后&#xff0c;紧接着又学习了单片机系统&#xff0c;单片机和NB-IoT模块有什么不同之处呢&#xff0c;总结为以下几点。 大纲如图&#xff1a; 一、硬件层面 1、采用芯片不同&#xff0c; &#xff08;1&#xff09;封装&#xff1a;封装尺寸、方式不同&a…

ubuntu运行指定的py环境

ubuntu运行指定的py环境 1&#xff1a;确定py文件的环境文件夹所在 source 环境文件地址/bin2&#xff1a;查看是否有环境文件/bin文件夹中是否有activate文件 如没有创建 sudo gedit activate写入 #!/bin/bash # This is the activate script for the virtual environmen…