“探索超前的Pinia:解密Vue.js最新热门状态管理库“

news2025/1/20 18:35:00

 

在Vue.js开发者的世界中,一个令人兴奋的新宠儿已经崭露头角,它就是Pinia。对于那些在状态管理方面追求卓越的人来说,Pinia是一片沃土,可以帮助你构建出令人叹为观止的应用程序。无论你是一名有经验的开发者,还是刚入门的菜鸟,本文将引导你踏上探索Pinia的旅程。从其卓越的性能到优雅的语法,以及无与伦比的可扩展性,你将发现Pinia的真正魅力。让我们一起揭开Vue.js最新热门状态管理库的神秘面纱吧! 

简介

简介
Pinia 是Vue的存储库,它允许您跨组件/页面共享状态
Pinia 最初是为了探索Vuex的下一次迭代会是什么样子,结合了Vuex 5核心团队讨论中的许多想法
最终,我们意识到Pinia已经实现了我们在 Vuex5中想要的大部分内容,并决定实现它取而代之的是新的建议
与Vuex相比,Pinia提供了一个更简单的 API,具有更少的规范

文档
官方文档
中文文档

注意
pinia有个副作用,就是无法持久化,在浏览器刷新重置之后,会全部恢复默认
我们可以利用插件实现本地持久化存储

普通搭建

安装依赖

安装pinia

cnpm install pinia --save

引入

编写main.js

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


        

持久搭建

安装依赖

安装pinia

cnpm install pinia --save



安装持久化插件

cnpm install --save pinia-plugin-persist


        

引入

编写main.js

import {createPinia} from "pinia"
import piniaPersist from 'pinia-plugin-persist'
const pinia=createPinia()
pinia.use(piniaPersist)
app.use(pinia)

编写仓库

src\stores\dataStore.js

import {defineStore} from "pinia"

export const useDataStore = defineStore("data", {
    state: () => {
        return {
            isLogin: false,//是否登录
        }
    },
    //本地持久化(把数据存储到浏览器本地)
    persist: {
        enabled: true,//是否开启持久化
        strategies: [
            {
                key: 'data', //自定义Key值,存储到本地时的key
                storage: localStorage, // 选择存储方式:本地存储
            },
        ],
    }
})

使用

引入

import {useDataStore} from "../../stores/dataStore"
const dataStore = useDataStore()
        

热更新

简介
pinia 支持热模块替换,因此你可以编辑store,并直接在您的应用程序中与它们交互,
而无需重新加载页面,允许您保持现有的状态,添加,甚至删除state,action和getter

开启【src/store/userInfo.js】

import { acceptHMRUpdate } from "pinia"
import axios from "axios"
if (import.meta.hot) {
import.meta.hot.accept(acceptHMRUpdate(useCountStore, import.meta.hot))
}


          

核心概念

State

src/store/userInfo.js

import { defineStore } from "pinia"
export const useCountStore = defineStore("count",{
state:() =>{
return{
count:10
}
}
})



组件中使用

{{ store.count }}
import { useCountStore } from "../store/count"
const store = useCountStore();



组件中使用【结构赋值】
store使用解构赋值之后失去了响应式,我们可以用storeToRefs来解决找个问题

{{ count }}
import { storeToRefs } from "pinia"
import { useCountStore } from "../store/count"
const store = useCountStore();
const { count } = storeToRefs(store)

Getters

src/store/userInfo.js

import { defineStore } from "pinia"
export const useCountStore = defineStore("count",{
state:() =>{
return{
count:10
}
},
getters:{
getCount:(state) => "当前Count:"+ state.count
}
})



访问其他 getter

getters:{
getCount:(state) => "当前Count:"+ state.count,
doubleCount(state){
return this.getCount + state.count
}
}



组件中使用

{{ store.getCount }}
import { useCountStore } from "../store/count"
const store = useCountStore();

Actions

src/store/userInfo.js

import { defineStore } from "pinia"
export const useCountStore = defineStore("count", {
    state: () => {
        return {
            count: 10
        }
    },
    getters: {
        getCount: (state) => "当前Count:" + state.count,
        doubleCount(state) {
            return this.getCount + state.count
        }
    },
    actions: {
        increment(num) {
            this.count++
        },
        decrement(num) {
            this.count--
        }
    }
})



组件中使用

import { useCountStore } from "../store/count"
const store = useCountStore();
function addCountHandler(){store.increment(5)}
function minCountHandler(){store.decrement(5)}

插件

插件

简介
由于是底层 API,Pinia Store可以完全扩展,这一扩展就是插件

作用
向 Store 添加新属性
定义 Store 时添加新选项
为 Store 添加新方法
包装现有方法
更改甚至取消操作
实现本地存储等副作用
仅适用于特定 Store
          

基本使用

编写插件
src/stores/plugins

export function piniaStoragePlugins({ store }) {
    console.log(store.count)
    store.$subscribe(() => {
        console.log(store.count)
    })
}



引入插件
main.js

import { piniaStoragePlugins } from "./stores/plugins"
pinia.use(piniaStoragePlugins)
        

自定义数据持久化插件

编写插件
src/utils/storage

// 本地存储
export function setStorage(key,value){
    localStorage.setItem(key,value)
}
export function getStorage(key){
    return localStorage.getItem(key)
}



src/stores/plugins

// 实现插件,本地存储
import { setStorage, getStorage } from "../../utils/storage"
export function piniaStoragePlugins({ store }) {
    if (getStorage("count")) {
        store.count = getStorage("count")
    }else{
        setStorage("count", store.count)
    }
    store.$subscribe(() => {
        setStorage("count", store.count)
    })
}



引入插件
main.js

import { piniaStoragePlugins } from "./stores/plugins"
pinia.use(piniaStoragePlugins)

第三方数据持久化插件

安装

cnpm install --save pinia-plugin-persist



引入插件
main.js

import piniaPersist from 'pinia-plugin-persist'
pinia.use(piniaPersist)


store仓库配置插件

import { defineStore } from "pinia"
export const useCountStore = defineStore("count", {
    state: () => {
        return {
            count: 10
        }
    },
    persist: {
        enabled: true,//是否开启持久化
        strategies: [
            {
                key: 'counts', //自定义Key值,存储到本地时的key
                storage: localStorage, //选择存储方式:本地存储
            },
        ],
    }
})



使用

import {useDataStore} from "../../stores/dataStore"
const dataStore = useDataStore()

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

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

相关文章

《开放加速规范AI服务器设计指南》发布,应对生成式AI爆发算力挑战

8月10日,在2023年开放计算社区中国峰会(OCP China Day 2023)上,《开放加速规范AI服务器设计指南》(以下简称《指南》)发布。《指南》面向生成式AI应用场景,进一步发展和完善了开放加速规范AI服务器的设计理论和设计方法…

小白到运维工程师自学之路 第七十五集 (Kubernetes 企业级高可用部署)2

8、添加master节点 在k8s-master2和k8s-master3节点创建文件夹 mkdir -p /etc/kubernetes/pki/etcd在k8s-master1节点执行 从k8s-master1复制密钥和相关文件到k8s-master2和k8s-master3 scp /etc/kubernetes/admin.conf root192.168.77.15:/etc/kubernetes scp /etc/kubernet…

TPAMI, 2023 | 用压缩隐逆向神经网络进行高精度稀疏雷达成像

CoIR: Compressive Implicit Radar | IEEE TPAMI, 2023 | 用压缩隐逆向神经网络进行高精度稀疏雷达成像 注1:本文系“无线感知论文速递”系列之一,致力于简洁清晰完整地介绍、解读无线感知领域最新的顶会/顶刊论文(包括但不限于Nature/Science及其子刊;MobiCom, Sigcom, MobiSy…

〔011〕Stable Diffusion 之 解决绘制多人或面部很小的人物时面部崩坏问题 篇

✨ 目录 🎈 脸部崩坏🎈 下载脸部修复插件🎈 启用脸部修复插件🎈 插件生成效果🎈 插件功能详解 🎈 脸部崩坏 相信很多人在画图时候,特别是画 有多个人物 图片或者 人物在图片中很小 的时候&…

【编织时空二:探究顺序表与链表的数据之旅】

本章重点 链表 链表的结合实现 顺序表和链表的区别和联系 1.链表 顺序表的问题及思考 顺序表的优点: 顺序表中的元素在内存中是连续存储的,因此可以通过索引直接访问任意位置的元素。顺序表尾插尾删操作实现简单。 问题: 中间/头部的插入…

我的创作纪念日+【MySQL】- 08 影响MySQL性能的配置参数

我的创作纪念日【MySQL】- 08 影响MySQL性能的配置参数 写在前面我的创作纪念日 mysql 优化服务器设置1.创建MySQL配置文件2.InnoDB缓冲池(Buffer Pool)3.线程缓存4.表缓存5.InnoDB I/O配置(事务日志)6.InnoDB并发配置7.优化排序&…

《电路》基础知识入门学习笔记

文章目录: 一:电路模型和电路规律 1.电路概述 2.电路模型 3.基本电路物理量:电流、电压、电功率和能量 4.电流和电压的参考方向 5.电路元件—电阻 6. 电路元件—电压源和电流源 7.受控电源 8.基尔霍夫(后面都要用这个方法…

G1的原理整理

有道云笔记 G1垃圾收集器是JDK7 update 4(2011年7月7日)引入的一款垃圾收集器,全称Garbage-First Garbage Collector,G1是一个分代的,增量的,并行与并发的标记-复制垃圾回收器。它的设计目标是为了适应现在…

一篇讲明白,配电柜如何精准监测

当今社会,电力作为现代生活和工业生产中不可或缺的重要能源,扮演着关键的角色。为了确保电力系统的可靠供应和高效运行,配电柜作为电力系统的核心组件之一,具有着重要的地位。 因此,配电柜监控系统在确保稳定的电力供应…

LC-链表的中间节点(双指针)

LC-链表的中间节点(双指针) 链接:https://leetcode.cn/problems/middle-of-the-linked-list/description/ 描述:给你单链表的头结点 head ,请你找出并返回链表的中间结点。 如果有两个中间结点,则返回第二…

Nacos和GateWay路由转发NotFoundException: 503 SERVICE_UNAVAILABLE “Unable to find

问题再现: 2023-08-15 16:51:16,151 DEBUG [reactor-http-nio-2][CompositeLog.java:147] - [dc73b32c-1] Encoding [{timestampTue Aug 15 16:51:16 CST 2023, path/content/course/list, status503, errorService Unavai (truncated)...] 2023-08-15 16:51:16,17…

【广州华锐视点】VR警务教育实训系统模拟真实场景进行实践训练

随着科技的发展,虚拟现实技术在教育领域得到了广泛的应用。VR警务教育实训系统就是其中的一种应用,该系统由广州华锐互动开发,可以模拟真实的警务场景,让学生通过虚拟现实技术进行实践训练,提高学生的实践能力和技能水…

“超越传统的HTTP请求:深度解析Axios,打造前端开发的终极利器“

解锁前端开发的新境界 - 深入探索Axios,构建卓越的互联网应用 在当今数字化世界中,互联网应用的需求日益增长,而无论是大型企业还是初创公司,都需要一个强大而可靠的工具来处理与后端服务器之间的通信。这就是Axios的光辉时刻。作…

53.Linux day03 文件查看命令,vi/vim常用命令

今天进行了新的学习。 目录 1.cat a.查看单个文件的内容: b.查看多个文件的内容: c.将多个文件的内容连接并输出到一个新文件: d.显示带有行号的文件内容: 2.more 3.less 4.head 5.tail 6.命令模式 7.插入模式 8.图…

等保测评标准和规范有哪些?

等保测评标准和规范的出现,为我国信息安全等级保护制度的建立和健全提供了重要的保障。 作为信息安全领域的重要评估标准,等保测评旨在通过对信息系统、网络安全设备和安全产品等的安全性能、安全功能、安全管理、安全控制和安全审计等方面的要求进行检查…

【11】Redis学习笔记 (微软windows版本)【Redis】

注意:官redis方不支持windows版本 只支持linux 此笔记是依托微软开发windows版本学习 一、前言 Redis简介: Redis(Remote Dictionary Server)是一个开源的内存数据结构存储系统,它也被称为数据结构服务器。Redis以键值对&am…

代码随想录算法训练营第58天|动态规划part15|392.判断子序列、115.不同的子序列

代码随想录算法训练营第58天|动态规划part15|392.判断子序列、115.不同的子序列 392.判断子序列 392.判断子序列 思路: (这道题也可以用双指针的思路来实现,时间复杂度也是O(n)) 这道题应该算是编辑距…

OpenCV-Python中的图像处理-傅里叶变换

OpenCV-Python中的图像处理-傅里叶变换 傅里叶变换Numpy中的傅里叶变换Numpy中的傅里叶逆变换OpenCV中的傅里叶变换OpenCV中的傅里叶逆变换 DFT的性能优化不同滤波算子傅里叶变换对比 傅里叶变换 傅里叶变换经常被用来分析不同滤波器的频率特性。我们可以使用 2D 离散傅里叶变…

BGP+MPLS+VPN

实验要求及拓扑 一、实验思路 1.先中间R2-R4区域可通 2.在R2、R4上创建两个虚拟空间 3.将R2上的R2和R1、R6直连接口关联到对应虚拟空间、将R4上的R4和R5、R7直连接口关联到对应虚拟空间,然后再配置IP地址 4.R2和R4BGP建邻 5.R2和R4邻居间端建立一个VPNV4的关系&…

包管理工具 nvm npm nrm yarn cnpm npx pnpm详解

包管理工具 nvm npm yarn cnpm npx pnpm npm、cnpm、yarn、pnpm、npx、nvm的区别:https://blog.csdn.net/weixin_53791978/article/details/122533843 npm、cnpm、yarn、pnpm、npx、nvm的区别:https://blog.csdn.net/weixin_53791978/article/details/1…