当前位置: 首页 > news >正文

Vue3 Pinia

1、安装Pinia

npm install pinia
npm install pinia-plugin-persistedstate

2、在main.js中配

import { createApp } from 'vue'
import App from './App.vue'
//引入pinia状态机
import { createPinia } from "pinia";
import piniaPluginPersistedstate from "pinia-plugin-persistedstate"; //pinia持久化const app = createApp(App);
const pinia = createPinia();app.use(ElementPlus, { locale: zhCn })
//全局挂载状态机
app.use(pinia);
pinia.use(piniaPluginPersistedstate);
app.mount('#app')

3、在src下创建store文件夹创建demo.js(状态)文件

import { defineStore } from "pinia";//userStore:定义一个仓库对象,保存用户信息
//state:仓库数据
//getters:仓库计算属性
//actions:仓库方法//pinia使用
// import { userStore } from "@/store/modules/userStore.js";
// const user_store = userStore()
// console.log(user_store.user, "-----userStore.user--")
//监听pinia值的变化
// user_store.$subscribe((mutate, state) => {
//   console.log("里面的数据发生了变化", mutate, state)
// })export const userStore = defineStore("users", {state: () => {//用户信息return {user: null,};},getters: {isLoggedIn: (state) => !!state.user, //是否登录},actions: {//登录updateLogin(user) {this.user = user;},//退出登录(清除本地存储的操作是异步的,所以这里使用async/await,确保清除完本地存储后再跳转到登录页面)async logout() {this.user = null;//并清空本地储存localStorage和sessionStorageawait localStorage.clear(); // 清除本地存储await sessionStorage.clear(); // 清除会话存储},//修改用户信息user中信息的通用方法,其中updates是一个对象,填写需要修改的信息updateUser(updates) {if (this.user) {this.user = { ...this.user, ...updates }}},},//增加一个插件方法(pinia-plugin-persist),解决刷新页面数据丢失的问题,持久化数据(该插件默认会将所有数据存储到sessionStorage中,也可以自定义存储策略)persist: {enabled: true,               // 启用持久化storage: sessionStorage,       // 存储方式: localStorage 或 sessionStorage// paths: ['count'],            // 只持久化 count 状态key: 'custom-counter-store', // 自定义存储的 key}
});

4、pinia使用


//pinia使用import { userStore } from "@/store/demo.js";const user_store = userStore()//user_store.变量名     进行使用或修改值// 第二种修改方法,批量变更// user_store.$patch({//   sum:888,//   school:"scu",//   address:'成都'// })console.log(user_store.user, "-----userStore.user--")//监听pinia值的变化user_store.$subscribe((mutate, state) => {console.log("里面的数据发生了变化", mutate, state)})

      http://www.dtcms.com/a/273947.html

      相关文章:

    1. 深入MyBatis:CRUD操作与高级查询实战
    2. mac电脑的usr/libexec目录是干什么的?
    3. 「Linux命令基础」文本模式系统关闭与重启
    4. Linux 内存管理之LRU链表
    5. 蓝牙协议栈高危漏洞曝光,攻击可入侵奔驰、大众和斯柯达车载娱乐系统
    6. HTTPS安全机制:从加密到证书全解析
    7. 意识边界的算法战争—脑机接口技术重构人类认知的颠覆性挑战
    8. React 的常用钩子函数在Vue中是如何设计体现出来的。
    9. 苹果UI 设计
    10. 前端面试专栏-算法篇:23. 图结构与遍历算法
    11. 4.丢出异常捕捉异常TryCatch C#例子
    12. 使用gdal读取shp及filegdb文件
    13. C/C++动态内存管理函数详解:malloc、calloc、realloc与free
    14. Launcher3桌面页面布局结构
    15. JavaScript加强篇——第四章 日期对象与DOM节点(基础)
    16. 基于 HT 技术的智慧交通三维可视化技术架构与实践
    17. 全球化 2.0 | 印尼金融科技公司通过云轴科技ZStack实现VMware替代
    18. Spring的事务控制——学习历程
    19. Kuberneres高级调度01
    20. 如何使用Fail2Ban阻止SSH暴力破解
    21. ICCV2025接收论文速览(1)
    22. 导出word并且插入图片
    23. 【C++ 深入解析 C++ 模板中的「依赖类型」】
    24. 「Linux命令基础」Shell命令基础
    25. PC网站和uniapp安卓APP、H5接入支付宝支付
    26. 基于ASP.NET+SQL Server实现(Web)企业进销存管理系统
    27. 《探索电脑麦克风声音采集多窗口实时可视化技术》
    28. 【Springboot】Bean解释
    29. Jenkins 自动触发执行的配置
    30. Ntfs!NtfsCheckpointVolume函数中的Ntfs!LfsFlushLfcb函数对Lfcb->LogHeadBuffer进行了赋值--重要