vue中使用pinia实现状态管理——useXXXStore函数

vue中使用pinia实现状态管理

大家一定在vue中还见过 useXXXStore这样的函数,用来实现状态管理的。可以把它当成一个永远存在的组件,每个组件都可以读取和写入它。它有三个概念,state、getter 和 action,我们可以假设这些概念相当于组件中的 datacomputedmethods

而它通过use开头,正是因为它也符合组合式函数风格的约定。和useXXX函数一样,它写在一个js/ts文件中。

最后在一起分析一下,再vue的vben框架中,是如何使用这个功能的。

pinia插件的优点

  • Devtools 支持
    • 追踪 actions、mutations 的时间线
    • 在组件中展示它们所用到的 Store
    • 让调试更容易的 Time travel
  • 热更新
    • 不必重载页面即可修改 Store
    • 开发时可保持当前的 State
  • 插件:可通过插件扩展 Pinia 功能
  • 为 JS 开发者提供适当的 TypeScript 支持以及自动补全功能。
  • 支持服务端渲染

建立这个“永久组件”的例子

引入pinia插件中的 defineStore 来建立,它的第一个参数要求是一个独一无二的名字(类似一个ID),第二个参数可接受两类值:Setup 函数或 Option 对象。

import { defineStore } from 'pinia'export const useCounterStore = defineStore('counter', {state: () => ({ count: 0 })// 类似于组件中computed的getters: {	doubleCount: (state) => state.count * 2,},actions: {increment() {this.count++},},
})

在组件中调用

组件中可以在setup中通过 useCounterStore()获得一个Store实例;再通过这个实例能够访问其中左右内容,并且是一直存在的(例子中counter的累加不会被清0)

<script setup>
import { useCounterStore } from '@/stores/counter'
const counter = useCounterStore()
counter.count++	// 修改count
counter.increment()	// 调用action
</script>
<template><!-- 模版中也可以直接访问 store 中的 state --><div>Current Count: {{ counter.count }}</div><div>Current doubleCount: {{ counter.doubleCount }}</div>
</template>

vben框架中如何使用了useXXXStore

首先,适用于记录了网站的登录用户相关信息,我们可以通过这个方法访问

src\store\modules\user.ts

export const useUserStore = defineStore({id: 'app-user',state: (): UserState => ({// user infouserInfo: null,// tokentoken: undefined,// roleListroleList: [],// Whether the login expiredsessionTimeout: false,// Last fetch timelastUpdateTime: 0,}),getters: {getUserInfo(state): UserInfo {return state.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY) || {};},getToken(state): string {return state.token || getAuthCache<string>(TOKEN_KEY);},// 省略},actions: {setToken(info: string | undefined) {this.token = info ? info : ''; // for null or undefined valuesetAuthCache(TOKEN_KEY, info);},setRoleList(roleList: RoleEnum[]) {this.roleList = roleList;setAuthCache(ROLES_KEY, roleList);},// 省略},
}

可以看到源码中是没有返回的,也就是不需要接收这个“组合式函数”的结果,而是接收一个对象,通过对象访问。

在vben管理权限的组合式函数(他负责管理权限,其中返回的方法hasPermission实现了按钮级别的权限管理功能)中,就调用了这个状态:

src\hooks\web\usePermission.ts

import { useUserStore } from '/@/store/modules/user';
// User permissions related operations
export function usePermission() {const userStore = useUserStore();const appStore = useAppStore();const permissionStore = usePermissionStore();const { closeAll } = useTabs(router);// 省略
}

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

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

相关文章

低边驱动与高边驱动

一.高边驱动和低边驱动 低边驱动(LSD): 在电路的接地端加了一个可控开关&#xff0c;低边驱动就是通过闭合地线来控制这个开关的开关。容易实现&#xff08;电路也比较简单&#xff0c;一般由MOS管加几个电阻、电容&#xff09;、适用电路简化和成本控制的情况。 高边驱动&am…

Qt 窗口

在Qt Creator 中创建项目的时候&#xff0c;我们能够选择创建QMainWindow 还是 QWidget 两种窗口。 二者有什么区别呢&#xff1f;其中 QMainWindow 是一种主窗口&#xff0c;包含菜单栏&#xff0c;工具栏&#xff0c;状态栏&#xff0c;中心窗口和浮动窗口等多个窗口组合&…

Java基础学习: 代理模式(Proxy Pattern)

文章目录 一、简介1、介绍2、代理模式在Java中的应用 二、实现方式1、静态代理2、动态代理 三、动态代理1、JDK2、Cglib3、总结 参考 一、简介 1、介绍 代理模式 2、代理模式在Java中的应用 统一异常处理。Mybatis使用了代理。Spring aop实现代理。日志框架。 二、实现方式…

位置参数

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 位置参数也称必备参数&#xff0c;是必须按照正确的顺序传到函数中&#xff0c;即调用时的数量和位置必须和定义时是一样的。 &#xff08;1&#x…

使用 Docker 和 Docker Compose 部署 Vue

使用 Docker 和 Docker Compose 部署 Vue 项目有两种方式&#xff1a;直接使用 Docker 和使用 Docker Compose。 创建 Dockerfile 在Vue.js项目根目录下创建一个 Dockerfile 的文件 # 使用最新的官方 Node.js 镜像作为基础镜像&#xff0c;并命名为 builder 阶段 FROM node:…

内测:ew0.0版本

温馨提示&#xff1a;懒得编&#xff0c;可能会存在一点点bug。 合作请私信我&#xff0c;周六日有空。 合作对象&#xff1a;小学生&#xff0c;初中生不等。 #include<bits/stdc.h> #include<windows.h> using namespace std; void sprintf(string s){int len…

stack和queue(1)

一、stack的简单介绍和使用 1.1 stack的介绍 1.stack是一种容器适配器&#xff0c;专门用在具有先进后出&#xff0c;后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的插入和弹出操作。 2.stack是作为容器适配器被实现的&#xff0c;容器适配器即是…

信号与槽函数的魔法:QT 5编程中的核心机制

新书上架~&#x1f447;全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我&#x1f446;&#xff0c;收藏下次不迷路┗|&#xff40;O′|┛ 嗷~~ 目录 一、信号与槽函数的基本概念 二、信号与槽函数的实现原理 三、信号与槽函数的代码实例 四…

搭载算能 BM1684 芯片,面向AI推理计算加速卡

搭载算能 BM1684 芯片&#xff0c;是面向AI推理的算力卡。可集成于服务器、工控机中&#xff0c;高效适配市场上所有AI算法&#xff0c;实现视频结构化、人脸识别、行为分析、状态监测等应用&#xff0c;为智慧城市、智慧交通、智慧能源、智慧金融、智慧电信、智慧工业等领域进…

实用软件分享---- i茅台 在windows上自动预约和自动获取小茅运的软件

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

计算机基础学习路线

计算机基础学习路线 整理自学计算机基础的过程&#xff0c;虽学习内容众多&#xff0c;然始终相信世上无难事&#xff0c;只怕有心人&#xff0c;期间也遇到许多志同道合的同学&#xff0c;现在也分享自己的学习过程来帮助有需要的。 一、数据结构与算法 视频方面我看的是青…

C++_list简单源码剖析:list模拟实现

文章目录 &#x1f680;1. ListNode模板&#x1f680;2. List_iterator模板(重要)&#x1f331;2.1 List_iterator的构造函数&#x1f331;2.2 List_iterator的关于ListNode的行为 &#x1f680;3. Reverse_list_iterator模板(拓展)&#x1f680;4. List模板(核心)&#x1f331…

NVM:Node版本管理切换 vue ‘cnpm‘ 不是内部或外部命令,也不是可运行的程序

nvm使用&#xff1a; Node 多版本管理_node版本管理_骑士梦的博客-CSDN博客 node.js 安装及配置环境变量只看此文_node环境变量设置-CSDN博客 # 安装11.13.0版本。 nvm install 11.13.0# 显示已安装的Node版本列表&#xff08;list可简化为ls&#xff09;。 nvm list# 切换1…

【计算机毕设】基于SpringBoot的房产销售系统设计与实现 - 源码免费(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 随着房地产市场的发展和互联网技术的进步&#xff0c;传统的房产销售模式逐渐向线上转移。设计并实现一个基于Spring Boot的房产销售系统&#xff0…

SpringCloud学习笔记(一)

SpringCloud、SpringCloud Alibaba 前置知识&#xff1a; 核心新组件&#xff1a; 所用版本&#xff1a; 学习方法&#xff1a; 1.看理论&#xff1a;官网 2.看源码&#xff1a;github 一、微服务理论知识 二、关于SpringCloud各种组件的停更/升级/替换 主业务逻辑是&#x…

尝试用智谱机器人+知识库,制作pytorch测试用例生成器

尝试用智谱机器人知识库,制作pytorch测试用例生成器 1 保存pytorch算子文档到txt2 创建知识库3 创建聊天机器人4 测试效果5 分享 背景:是否能将API的接口文档和sample放到RAG知识库,让LLM编写API相关的程序呢 小结:当前的实验效果并不理想,可以生成代码,但几乎都存在BUG 1 保存…

LeetCode:2965.找出缺失和重复的数字(hash Java)

目录 2965.找出缺失和重复的数字 题目描述&#xff1a; 实现代码与解析&#xff1a; hash 原理思路&#xff1a; 2965.找出缺失和重复的数字 题目描述&#xff1a; 给你一个下标从 0 开始的二维整数矩阵 grid&#xff0c;大小为 n * n &#xff0c;其中的值在 [1, n2] 范围…

星闪在智能汽车端的应用

随着智能汽车、智能终端、智能家居和智能制造等多产业的快速发展&#xff0c;多应用领域对无线短距通信技术在低延时、高可靠、低功耗等方面提出共性要求&#xff0c;现有主流无线短距通信技术的先天局限和技术潜力无法满足新应用的技术要求&#xff0c;针对解决行业技术痛点的…

StrApi基本使用

1.创建项目(这里只使用默认的sqllite) 点击链接进入官网查看先决条件,看看自己的node,python等是否符合版本要求 运行以下命令进行创建项目(网慢导致下载失败的话可以尝试使用手机热点给电脑使用,我就是这样解决的,也可以看我csdn的资源这里进行下载) yarn create strapi-ap…

智能化改造的关键点

1. 自动化与信息化的结合&#xff1a;通过自动化设备和信息化系统的结合&#xff0c;实现生产过程的自动化控制和数据管理。 2. 系统集成&#xff1a;将企业内部的各种系统&#xff08;如ERP、MES、PLM等&#xff09;进行有效集成&#xff0c;实现数据的流通和共享。 3. 精益…