【vue3之Pinia:状态管理工具】

Pinia:状态管理工具

  • 一、认识Pinia
  • 二、定义store
  • 三、gettters
  • 四、Action
    • 1.定义普通函数
    • 2.异步实现
  • 五、storeToRefs工具函数
  • 六、pinia持久化插件
    • 1. 安装插件
    • 2. main.js 使用
    • 3. 开启
    • 4.其他配置

一、认识Pinia

Pinia 是 Vue 的最新 状态管理工具 ,是 Vuex 的 替代品
优点:

  1. 提供更加简单的API (去掉了 mutation )
  2. 提供符合,组合式风格的API (和 Vue3 新语法统一)
  3. 去掉了 modules 的概念,每一个 store 都是一个独立的模块
  4. 配合 TypeScript 更加友好,提供可靠的类型推断
    注:在Pinia中,省去了mutations和modules两个核心概念,actions里能直接同步或者异步修改state里的值

二、定义store

  1. 定义store
  2. 组件使用store

来自vue3官网:
在store.js文件夹下定义
在这里插入图片描述
选择组合式API的方式定义属性和方法:
在这里插入图片描述

在这里插入图片描述

三、gettters

Getter 完全等同于 store 的 state 的计算值。

在这里插入图片描述
然后再return一下douleCount就可以在组件中使用了:

  return {count,doubleCount,}

四、Action

action相当于组件中的 method。

1.定义普通函数

  const count = ref(100)// 声明操作数据的方法 action (普通函数)const addCount = () => count.value++const subCount = () => count.value--return {count,addCount,subCount,}

2.异步实现

export const useChannelStore = defineStore('channel', () => {// 声明数据const channelList = ref([])// 声明操作数据的方法const getList = async () => {// 支持异步const { data: { data }} = await axios.get('http://geek.itheima.net/v1_0/channels')channelList.value = data.channels}// 声明getters相关return {channelList,getList}
})

五、storeToRefs工具函数

当你从 Vuex 或其他状态管理库中获取数据时,通常会遇到解构对象属性后失去响应式的问题。这是因为解构会破坏对象的响应式性质。

在 Vue 3 中,可以通过使用 toRefs 函数来解决这个问题。toRefs 可以将包含响应式数据的对象转换为普通对象,但保留其属性的响应式性。在这里插入图片描述
方法是一个固定的函数,我们不用去更改方法,顶多调用,所以不需要用storeToRefs
在这里插入图片描述
在这里插入图片描述

六、pinia持久化插件

官方文档:https://prazdevs.github.io/pinia-plugin-persistedstate/zh/

1. 安装插件

pinia-plugin-persistedstate npm i pinia-plugin-persistedstate

2. main.js 使用

import persist from 'pinia-plugin-persistedstate' ... app.use(createPinia().use(persist))

3. 开启

store仓库中的第三个配置项中,persist: true 开启

4.其他配置

详情请见官方文档
在这里插入图片描述
在这里插入图片描述
演示:

import { defineStore } from 'pinia'
import { computed, ref } from 'vue'// 定义store
// defineStore(仓库的唯一标识, () => { ... })
export const useCounterStore = defineStore('counter', () => {// 声明数据 state - countconst count = ref(100)// 声明操作数据的方法 action (普通函数)const addCount = () => count.value++const subCount = () => count.value--// 声明基于数据派生的计算属性 getters (computed)const double = computed(() => count.value * 2)// 声明数据 state - msgconst msg = ref('hello pinia')return {count,double,addCount,subCount,msg,}
}, {// persist: true // 开启当前模块的持久化persist: {key: 'hm-counter', // 修改本地存储的唯一标识paths: ['count'] // 存储的是哪些数据}
})

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

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

相关文章

OpenCV 视频处理(关于摄像头和视频文件的读取、显示、保存等等)

1、前言 OpenCV不仅能够处理图像,还能够处理视频 视频是由大量的图像构成的,这些图像是以固定的时间间隔从视频中获取的。这样,就能够使用图像处理的方法对这些图像进行处理,进而达到处理视频的目的。要想处理视频,需…

【 Go】GoFrame 框架下执行 SQL 语句并获取结果

在 GoFrame 框架中,可以使用db包来执行 SQL 语句并获取结果。以下是一个简单的示例代码,演示如何在 GoFrame 中调用一个 SQL 语句并获取结果: package mainimport ("fmt""github.com/gogf/gf/frame/g" )func main() {//…

PCL官方demo的编译使用教程

写在前面 本文内容 PCL官方demo的编译使用教程; 后续对PCL demo中比较常用的算法、应用demo会出专门的博客讲解、拓展; 更多点云基础、算法相关内容请关注专栏: 点云处理基础 点云配准(PointCloud Registration) Open3D点云处理 PCL点云处理 …

boost.redis崩溃的解决方法

使用boost.redis的协程一定要co_spawn在strand对象中。 正确的用法: boost::asio::co_spawn(boost::dasio::make_strand(ioc),XXXCoroutine(),boost::asio::detached ); 错误的用法: boost::asio::co_spawn(ioc,XXXCoroutine(),boost::asio::detache…

极狐GitLab 16.3 重磅发布,极致的 DevOps 体验等你来【二】

GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 极狐GitLab 在去年 8 月份发布了 16.3 版本。此次发布带来了价…

Python程序设计通常涵盖以下主题:

Python程序设计通常涵盖以下主题: 基础语法:包括变量、数据类型(如整数、浮点数、字符串、列表、元组、字典等)、条件语句、循环语句等。 函数:如何定义函数、传递参数、返回值等。 模块和包:如何导入和使…

【Office】Word、Excel 和 PowerPoint 中常用的一些快捷键

以下是 Microsoft Word、Excel 和 PowerPoint 的全部常用快捷键: Microsoft Word 快捷键: 常用快捷键: 新建文档:Ctrl N打开文档:Ctrl O保存文档:Ctrl S复制:Ctrl C粘贴:Ctrl …

Docker本地部署Redis容器结合内网穿透实现无公网ip远程连接

文章目录 前言1. 安装Docker步骤2. 使用docker拉取redis镜像3. 启动redis容器4. 本地连接测试4.1 安装redis图形化界面工具4.2 使用RDM连接测试 5. 公网远程访问本地redis5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定TCP地址远程访问 前言 本文主要介绍如何在Ub…

代码随想录算法训练营第23天

509. 斐波那契数 class Solution:def fib(self, n: int) -> int:if n 1:return 1if n 0:return 0 dp [0]*(n1)dp[1] 1for i in range(2,n1):dp[i] dp[i-1] dp[i-2]return dp[-1] 70. 爬楼梯 class Solution:def climbStairs(self, n: int) -> int:dp [0] * (n1)i…

Python与FPGA——局部二值化

文章目录 前言一、局部二值化二、Python局部二值化三、FPGA局部二值化总结 前言 局部二值化较全局二值化难,我们将在此实现Python与FPGA的局部二值化处理。 一、局部二值化 局部二值化就是使用一个窗口,在图像上进行扫描,每扫出9个像素求平均…

探索AI视频创新:Sora的奇迹

探索AI视频创新:Sora的奇迹 随着科技的不断演进,AI视频模型已经成为人工智能领域的一颗新星。在这场技术的风暴中,OpenAI的Sora模型以其杰出的性能和前瞻性的技术脱颖而出,正引领着AI视频领域的全新创新浪潮。 Sora的技术之光 …

【深度学习笔记】优化算法——小批量随机梯度下降

小批量随机梯度下降 到目前为止,我们在基于梯度的学习方法中遇到了两个极端情况: :numref:sec_gd中使用完整数据集来计算梯度并更新参数, :numref:sec_sgd中一次处理一个训练样本来取得进展。 二者各有利弊:每当数据非常相似时&a…

电脑蓝牙在哪里打开?不同系统详解

在现代计算机的多功能性中,蓝牙技术的广泛应用使得我们能够轻松连接各种外部设备,实现无线传输和分享。无论是连接无线耳机、键盘,还是与其他设备快速交换文件,蓝牙在电脑中的角色很重要。然而,对于一些用户而言&#…

centos7 使用rpm包部署filebeat

先决条件参考 虚拟机部署elasticsearch集群-CSDN博客 下载并安装filebeat的rpm包 curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.17.18-x86_64.rpmrpm -vi filebeat-7.17.18-x86_64.rpm 修改配置文件 配置文件内容可以参考 Repositories…

5G工业网关是什么?

随着科技的飞速发展,5G技术已经逐渐渗透到我们生活的方方面面。而在工业领域,5G工业网关作为连接工业设备与网络的关键组件,正发挥着越来越重要的作用。HiWoo Box其5G工业网关产品以其卓越的性能和稳定性,正助力企业实现数字化转型…

互联网面试突击算法-快速排序

快速排序(Quick Sort)是一种常用的高效排序算法,它采用了分治策略来实现排序。快速排序的基本思想是选择一个基准元素,将数组分割成两个子数组,其中一个子数组中的所有元素都小于基准元素,而另一个子数组中…

Hive动态分区静态分区

简述:分区是hive存放数据的一种方式,将列值作为目录来存放数据,就是一个分区,可以有多列。 这样查询时使用分区列进行过滤,只需根据列值直接扫描对应目录下的数据,不扫描不关心的分区,快速定位,提高查询效率。 hive的分区有两种类型: 静态分区SP(Static Partitionin…

互联网面试突击算法-基数排序

基数排序是一种非比较的排序算法,它根据元素的位数进行排序。它将整数按照位数(个位、十位、百位等)进行分组,然后分别对每个位数进行稳定的排序。通过多次按位排序,最终可以得到有序的结果。 基数排序的思想是从低位…

【异常处理】Vue报错 Component template should contain exactly one root element.

问题描述 启动VUE项目后控制台报错: Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.翻译为:组件模板应该只包含一个根元素 查看vue代码&#xff0…

使用Unity Mock HMD模拟眼动追踪体验

在虚拟现实(VR)应用开发中,眼动追踪技术是提升用户体验的关键因素之一。它允许开发者创建更自然的交互方式,提升沉浸感。本文将介绍如何在Unity中使用Mock HMD来模拟眼动追踪,为没有实际眼动追踪硬件的开发者提供一种解决方案。 项目结构 首…