【pinia学习】pinia课程学习笔记

news2025/9/20 12:27:59

课程地址: VUE新一代状态管理工具Pinia超详细基础入门

贴两个链接:

vue3官方文档
pinia官方文档

P1 《pinia的简介》

不得不说“开卷有益,学有所获”,前两天自己找pinia的官方文档好像也没找对,原来在vue3官方生态系统里有pinia官网入口,不学习真是不知道!
在这里插入图片描述
pinia简介看文档:
在这里插入图片描述
在这里插入图片描述

pinia可以用来创建一个仓库,里面可以存储一些多个组件都需要使用的数据;如果数据是从后端接口获取的,也可以由仓库去发送请求接口数据,然后存储在仓库,使用数据的组件都可以从仓库获取数据:

在这里插入图片描述

P2 《创建vue3项目并安装pinia》

使用以下命令创建vue项目,选择选项时我们先不自动安装pinia,之后手动安装:

npm init vue@latese

在这里插入图片描述

安装pinia:

在这里插入图片描述

运行并打开项目:

在这里插入图片描述

安装完成后查看package.json文件,可以看到pinia的版本:

在这里插入图片描述

在项目中引入并安装pinia:

在这里插入图片描述

import { createPinia } from 'pinia'
const pinia = createPinia()
app.use(pinia)

(下图红框语句第二个红框框错了,应该框下一行即第9行,懒得改啦)
在这里插入图片描述

如果是vue2,则需要如下操作:

在这里插入图片描述

store承载着全局状态,每个组件都可以从store读取和存入状态,store包括三个概念:state、getter、action。其中,state相当于组件中的data,getter相当于组件中的computed,action则相当于组件中的methods。

在这里插入图片描述

P3《定义Option store》

pinia中,可以使用 createStore() 方法创建多个store,比如a、b、c三个store数据,组件中都可以去引入这些数据:

在这里插入图片描述

用 defineStore() 方法 来定义一个store,第一个参数是这个store的名字,相当于id。

摘自文档:
同时,对于 defineStore() 方法的返回值,你可以任意命名 defineStore() 的返回值,但最好使用 store 的名字,同时以 use 开头且以Store 结尾。 (比如 useUserStoreuseCartStoreuseProductStore)
第一个参数是你的应用中 Store 的唯一 ID。

在这里插入图片描述

在这里插入图片描述

defineStore()的第二个参数可以是setup函数或Option对象,先来看下Option对象的情况:

在这里插入图片描述

在这里插入图片描述

项目中src目录下新建stores目录,在其中新建index.js文件,在其中定义一个store数据:

在这里插入图片描述

在这里插入图片描述

P3《定义setup store以及使用store》

这一节看一下 defineStore() 的第二个参数的setup形式:

在这里插入图片描述
在这里插入图片描述

在index.js文件中再用setup形式定义另一个store:

在这里插入图片描述

注意:defineStore() 方法执行后返回的是一个函数,也即 useAgeStore、useCounterStore 都是一个函数。

在组件中使用store数据:
将定义的store函数引入并执行,打印出来观察:发现它是一个Proxy对象,其上面有我们定义的属性(state、getter)和方法(action):

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在模板中使用store数据与方法:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

如果将store实例上的属性和方法解构出来,会发现页面展示正常,但点击按钮时数据不会改变,说明此时数据已经丧失了响应性:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结一下就是:store实例上的数据不能直接解构出来,需要使用 storeToRefs 来解构,这样才不会丧失响应性:

在这里插入图片描述

但需要注意,storeToRefs 不能解构actions 方法;actions 方法直接解构就可以(亲测如果用storeToRefs 将action方法解构出来,点击执行该方法无效):

在这里插入图片描述

在这里插入图片描述

P5《pinia核心概念-State的基本使用》

pinia的核心概念有3个:store、getters、actions

关于state:既可以直接返回一个对象,也可以返回一个箭头函数,函数中返回一个对象,这种函数的形式主要是为了服务端渲染时防止数据污染。这里要区别vuex中的state直接返回一个对象,pinia中的state尽量都写成返回函数,函数中返回一个对象的形式。
在这里插入图片描述

在这里插入图片描述

修改store中的状态值:

在这里插入图片描述

假如store中有多个状态值,可以使用 store实例的 $patch(对象参数) 方法来修改,其中,未修改的状态值不会受到影响:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

假如state中还有数组类型的数据:

在这里插入图片描述
在这里插入图片描述

但这种针对数组的修改方式不够优雅,且当对数组进行从中间删除某些元素或插入某些元素时,也不方便操作,这时来看下 $patch() 的第二种使用方式,即 $patch(函数) 的形式,这种方式是强烈推荐的方式

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

总结,修改state中的数据的方式有4种,分别是:

const changeState = ()=>{
  // 方法一:直接修改
  ageStore.name = 'sy888'
  ageStore.age = 28
  ageStore.list.push(4,5,6) 
  
  // 方法二:使用 $patch(对象)  
  ageStore.$patch({
    name:'sy888',
    age:28,
    list:[...ageStore.list, 4,5,6]
  }) 
  
  // 方法三:使用 $patch(函数) —— 强烈推荐使用此种方法
  ageStore.$patch((state)=>{
    state.name = 'sy888'
    state.age = 28
    state.list.splice(2,1,8)
  })
  
  // 方法四:使用actions中封装好的方法
}

P6《pinia核心概念-Getter的基本使用》

在这里插入图片描述

1、getter的第一个知识点:在其中使用this,this指向store实例。

在这里插入图片描述

但使用this的方式,无法获取ts的类型推断:

在这里插入图片描述

使用 state 作为 函数参数的形式,可以获得ts的类型推断:

在这里插入图片描述

2、getter的第二个知识点:访问同一个store中的其它getter值:直接通过this获取其它getter,先写成箭头函数的形式试一试看行不行呢?

在这里插入图片描述

在这里插入图片描述

发现报错:

在这里插入图片描述

原因就是在这里使用了箭头函数,箭头函数中的this不再是state对象,而是undefined(亲测打印为undefined):

在这里插入图片描述

改为普通函数的形式,就可以成功了:

在这里插入图片描述

3、getter的第三个知识点:向getter传递参数

在这里插入图片描述

在模板中这样使用:调用函数的形式使用并传递参数:

在这里插入图片描述

4、getter的第四个知识点:一个store使用另一个store中的getter数据:直接通过执行另一个store的方法获取另一个store的实例,通过这个实例就可以直接拿到其getter数据:

在这里插入图片描述

P7《pinia核心概念-Action的基本使用》

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在actions中定义一个方法,在其中调用接口获取数据:

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在页面中触发这个action时,可以获取到数据:

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在一个store中使用另一个store中的action:
在counter的store中增加一个login的action:

在这里插入图片描述

在 age 的 store 中获取到counter 的 store的实例,并使用其定义的action:

在这里插入图片描述

pinia的action与vuex的action的不同是:pinia的action既可以处理同步操作,也可以处理异步操作。

P8《pinia和vuex的比较》

在这里插入图片描述

在这里插入图片描述

总结 pinia 与 vuex 的不同:

在这里插入图片描述

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

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

相关文章

万象皆歌everySings音乐与AI技术的邂逅,内测启动

在这个快节奏的数字时代,音乐依然扮演着连接人心、传递情感的重要角色。然而,音乐创作往往被视为门槛较高的艺术形式,需要复杂的理论知识和漫长的实践经验。但现在,随着人工智能技术的不断进步,让大众对音乐的获悉和交…

消息的可靠性·

面试题:Rabbitmq怎么保证消息的可靠性? 1.消费端消息可靠性保证: 消息确认(Acknowledgements): 消费者在接收到消息后,默认情况下RabbitMQ会自动确认消息(autoAcktrue)。为保证消…

JS加密:对比JScrambler和JShaman加密效果

本文,以一个实例,比对JS加密两大神器:JScrambler、JShaman的加密结果,看看谁的加密效果更好。 注:本文不是技术文章,仅仅从加密结果的“型”上简单观查,不做技术分析,仅看哪个加密代…

【学习笔记】3、逻辑门电路

3.1 MOS逻辑门电路 按照器件结构的不同形式,分为NMOS、PMOS、CMOS三种逻辑门电路。 3.1.1 CMOS CMOS电路成为主导地位的逻辑器件。工作速度:赶上甚至超过TTL电路。(早期CMOS速度慢,后来工艺提升速度变快)功耗和抗干…

【讲解下TypeScript的基础知识点】

🌈个人主页: 程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

RK3568驱动指南|第二篇 字符设备基础-第15章 文件私有数据实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

Logistic 回归为什么适用于二分类问题?

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ Logistic 回归非常适用于二分类问题的主要原因在于它的核心机制和输出特性。首先,Logistic 回归模型基于概率的理念,通过 Sigmoid 函数转换输入特征的线性组合,将任意…

windows下安装yolov8环境(详细图文教程)

目录 一:前言 二:安装yolov8 一:前言 最近看了 YOLO 的发展史,发现在机器视觉领域的应用非常广泛,f刚好最近一直在做机器视觉的工作,特此记录下搭建yolov的环境。我们使用的版本是yolov8的就用这个作为演…

【简单讲解下WebSocket】

🌈个人主页:程序员不想敲代码啊 🏆CSDN优质创作者,CSDN实力新星,CSDN博客专家 👍点赞⭐评论⭐收藏 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共…

OpenHarmony NAPI 框架生成工具实现流程

NAPI 框架生成工具 可以根据用户指定路径下的 ts(typescript)接口文件一键生成 NAPI 框架代码、业务代码框架、GN 文件等。在开发 JS 应用与 NAPI 间接口时,底层框架开发者无需关注 Nodejs 语法、C 与 JS 之间的数据类型转换等上层应用转换逻辑,只关注底…

photomaker:customizing realistic human photos via stacked id embedding

PhotoMaker: 高效个性化定制人像照片文生图 - 知乎今天分享我们团队最新的工作PhotoMaker的技术细节。该工作开源5天Githubstar数已过6千次,已列入Github官方Trending榜第一位,PaperswithCode热度榜第一位,HuggingFace Spaces趋势榜第一位。项…

Linux之线程互斥与同步

1.线程互斥相关概念 临界资源:多线程执行流共享的资源就叫做临界资源 。 临界区:每个线程内部,访问临界自娱的代码,就叫做临界区。 互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临…

【蓝桥杯嵌入式】Cubemx新建工程引脚配置与点亮LED

【蓝桥杯嵌入式】Cubemx新建工程引脚配置与点亮LED cubemx基础配置LED 引脚配置按键配置按键引脚配置定时器扫描配置 工程管理配置点亮LED程序设计keil配置与程序下载 参考博文1:STM32 | 利用STM32CubeMX初始化一个STM32工程 参考博文1:点亮LED灯&#x…

PMP考试后多长时间出成绩,如何查询PMP成绩?

PMP考试成绩通常在考试结束后的6—8周左右公布,具体时间取决于PMI的审核时间和发布成绩的流程。PMI也会及时发邮件通知大家。没有及时看到自己成绩的考生,也无需担心,PMP考试成绩发布时间会持续一周左右。如果通过考试,则可以在PM…

TRIZ创新技术的四大分离原理:空间、时间、条件、整体与部分分离

TRIZ创新技术中的四大分离原理是空间分离原理、时间分离原理、条件分离原理和整体与部分分离原理。这些原理是TRIZ理论中的核心组成部分,旨在解决创新过程中遇到的复杂技术问题。 首先,空间分离原理指的是将不同的目标物体或目标属性通过分离它们的空间…

基于Spring Boot+Vue的在线拍卖系统

随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单管理、…

小兴教你做平衡小车-平衡车主板绘制(V2版本 目前使用版本 bug已修复)

文章目录 1 原理图总览2 各模块介绍2.1 2.54mm插针(stm32最小系统扩展接口)2.2 OLED显示2.3 MPU60502.4 TB6612驱动电路2.5 供电电路2.6 按键电路2.7 2.54mm排座(stm32最小系统连接接口)2.8 测距模块2.9 蓝牙模块2.10 蜂鸣器模块2.11 电池电压检测电路2.12 电源指示电路2.13 用…

拥抱智能,IT运维将有哪些变化?

Gartner数据显示,2023年AIOps在中国市场渗透率只达到目标受众的5%-20%。这一数据意味着仍有大量企业还未进行AIOps建设,未来AIOps市场前景广阔。目前,已经开始应用AIOps的企业,智能运维水平普遍还处于辅助智能化运维阶段&#xff…

基于springboot+vue实现的高校宿舍管理系统(界面优美,十分推荐)

一、项目简介 本项目是一套基于springbootvue实现的高校宿舍管理系统设计与实现 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse或者idea 确保可以运行! 该系统功能完善、界面美观…

算法刷题Day31 | 455.分发饼干、376. 摆动序列、53. 最大子数组和

目录 0 引言1 分发饼干1.1 我的解题1.2 更好的解题 2 摆动序列2.1 我的解题2.2 我的错误原因(GPT分析)2.3 改进 3 最大子数组和3.1 我的解题 🙋‍♂️ 作者:海码007📜 专栏:算法专栏💥 标题&…