Pinia的使用技巧
一、安装
npm install pinia
二、main.ts引入
import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'const app = createApp(App)
app.use(createPinia())
app.mount('#app')
三、定义参数
import { defineStore } from 'pinia'type User = {name: string,age: number
}const peo: User = {name: 'cqs',age: 23
}const login = (): Promise<User> => {return new Promise(resolve => {setTimeout(() => {resolve(peo)}, 2000)})
}export const useTestStore = defineStore('user', {state: () => {return {name: 'cqs',age: 23,user: <User>{}}},getters: {getNewName():string {return `好名字:${this.name}-${this.getAge}`},getAge():number {return this.age}},actions: {setName(name: string) {this.name = name;},async setUser() {const user = await login()this.user = user}}
})
四、store使用
1.直接获取
<script setup lang="ts">
import { useTestStore } from '../store'const user = useTestStore();console.log(user.age)
</script>
2.通过storeToRefs 获取
<script setup lang="ts">
import { storeToRefs } from 'pinia'
const { name, age } = storeToRefs(user)
</script>
3.$patch修改
<script setup lang="ts">
import { useTestStore } from '../store'const user = useTestStore();user.$patch({name: '123'
})
user.$patch((state)=>{state.name = '456'
})
</script>
4.直接修改
<script setup lang="ts">
import { useTestStore } from '../store'const user = useTestStore();user.name = '123'
</script>
5.通过$state修改
<script setup lang="ts">
import { useTestStore } from '../store'const user = useTestStore();
//重写需要参数都传
user.$state = {name: 'qwe',age: 234,user: {name: '123',age: 23}}
</script>
五、回滚数据
<script setup lang="ts">
import { useTestStore } from '../store'const user = useTestStore();user.$reset()
</script>
六、监听数据变化
<script setup lang="ts">
import { useTestStore } from '../store'const user = useTestStore();//监听数据改变
user.$subscribe((args, state)=>{console.log(args);console.log(state);
}, {detached: true, //页面销毁,方法不会销毁deep: true,flush: 'post'
})//监听调用actions,第二个参数true页面销毁,方法不会销毁
user.$onAction((args)=>{args.after(()=>{console.log('监听调用数据改变之后');})console.log(args);
}, true)
</script>
七、添加浏览器缓存,避免刷新页面数据消失
修改main.ts
import { createApp, toRaw } from 'vue'
import App from './App.vue'
import { createPinia, PiniaPluginContext } from 'pinia'const app = createApp(App)type Option = {key: string
}const PiniaPlugin = (option: Option) => {return (context: PiniaPluginContext) => {const { store } = context;const data = localStorage.getItem('pinia-' + option.key + store.$id);store.$subscribe(() => {localStorage.setItem('pinia-' + option.key + store.$id, JSON.stringify(toRaw(store.$state)))})return {...(data ? JSON.parse(data) : {})}}
}const store = createPinia();
store.use(PiniaPlugin({ key: 'cqs' }))
app.use(store)
app.mount('#app')
相关文章:
Pinia的使用技巧
一、安装 npm install pinia 二、main.ts引入 import { createApp } from vue import App from ./App.vue import { createPinia } from piniaconst app createApp(App) app.use(createPinia()) app.mount(#app)三、定义参数 import { defineStore } from piniatype User …...

『亚马逊云科技产品测评』活动征文|AWS 数据库产品类别及其适用场景详细说明
授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道 目录 前言、AWS 数据库产品类别 01、Amazon Aurora 02、Amazon Docum…...
S32K324 UDS Bootloader开发-下位机篇-Bootload软件(3)
文章目录 前言校验算法34服务响应的字节字节对齐问题跳转问题Boot Delay功能重要配置跳转标志FLASH DRIVER和APP区域CAN ID配置中断使能与禁止CAN TP配置总结前言 上一篇文章介绍了S32K324 UDS Bootlodaer开发中的UDS相关的更改,本文总结一下调试过程中出现的一些问题,及解决…...

如何在 Vim 中剪切、复制和粘贴
目录 前言 如何在 Vim 编辑器中复制文本 如何在 Vim 编辑器中剪切文本 如何在 Vim 编辑器中粘贴文本 如何通过选择文本来剪切和复制文本 通过选择文本复制 在 Vim 中选择文本来剪切文本 前言 在本篇 Vim 快速技巧中,你将学习到剪切和复制粘贴的相关知识。 剪…...
算法基础一
两数之和 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 解题思路:这道题最优的做法时间复杂度是O(n),顺序扫描数组,对每一个元素在…...

6.3 Windows驱动开发:内核枚举IoTimer定时器
内核I/O定时器(Kernel I/O Timer)是Windows内核中的一个对象,它允许内核或驱动程序设置一个定时器,以便在指定的时间间隔内调用一个回调函数。通常,内核I/O定时器用于周期性地执行某个任务,例如检查驱动程序…...
大数据-之LibrA数据库系统告警处理(ALM-37005 GTM进程异常)
告警解释 当出现如下情况时,产生该告警: GTM实例数据目录中的gtm.conf配置文件不存在或者其中某个配置参数不正确时。GTM实例服务线程无法监听IP,或者无法绑定监听端口。GTM实例进程没有其数据目录读写权限时。 告警属性 告警ID 告警级别…...

一种LED驱动专用控制电路
一、基本概述 TM1620是一种LED(发光二极管显示器)驱动控制专用IC,内部集成有MCU数字接口、数据锁存 器、LED驱动等电路。本产品质量可靠、稳定性好、抗干扰能力强。主要适用于家电设备(智能热 水器、微波炉、洗衣机、空调、电磁炉)、机顶盒、电子称、…...

Matlab进阶绘图第33期—双曲面图
在《Matlab论文插图绘制模板第56期—曲面图(Surf)》中,我分享过曲面图的绘制模板。 然而,有的时候,需要在一张图上绘制两个及以上的曲面图,且每个曲面图使用不同的配色方案。 在Matlab中,一张…...

【Linux】23、内存超详细介绍
文章目录 零、资料一、内存映射1.1 TLB1.2 多级页表1.3 大页 二、虚拟内存空间分布2.1 用户空间的段2.2 内存分配和回收2.2.1 小对象2.2.2 释放 三、查看内存使用情况3.1 Buffer 和 Cache3.1.1 proc 文件系统3.1.2 案例3.1.2.1 场景 1:磁盘和文件写案例3.1.2.2 场景…...

官网IDM下载和安装的详细步骤
目录 一、IDM是什么 二、下载安装 三、解决下载超时的问题 四、谷歌浏览器打开IDM插件 谷歌浏览器下载官网👇 五、测试 六、资源包获取 一、IDM是什么 IDM(internet download manager)是一个互联网下载工具插件,常见于用…...
【面经八股】搜广推方向:常见面试题(三)
【面经&八股】搜广推方向:常见面试题(三) 文章目录 【面经&八股】搜广推方向:常见面试题(三)1. 如何解决数据不平衡2. 假设检验的两类错误3. 为什么快排比堆排快4. RMSE、MSE、MAE5. 双塔模型的应用6. XGBoost如果损失函数没有二阶导,该怎么办7. AUC是如何实现的…...

[NOIP2006]明明的随机数
一、题目 登录—专业IT笔试面试备考平台_牛客网 二、代码 set去重,再利用vector进行排序 std::set是一个自带排序功能的容器,它已经按照一定的规则(默认是元素的小于比较)对元素进行了排序。因此,你不能直接对std::s…...
auth模块
一. auth模块前戏 # 引入:其实我们在创建好一个django项目之后直接执行数据库迁移命令会自动生成很多表 例如:django_sessionauth_user我们知道django在启动之后就可以直接访问admin路由,需要输入用户名和密码,数据参考的就是auth_user表,并且还必须是管…...
H5ke12--3--iframe--编辑邮箱的制作
下面我们来window.iframes[] frames是一个全局变量,它是一个对象数组,其中包含当前窗口中的所有框架(如果存在)。 在这段代码中,let frameframes[0];是将第一个框架赋值给变量frame。通过frame.document.designMode&q…...
Python面经【3】
零、可迭代对象 可迭代对象是迭代器和生成器的基础,简单来说,可以使用for循环遍历的对象就是可迭代对象,比如常见的list、set和dict。在python中,可迭代对象是指实现了__iter__()方法的对象,当我们使用for循环遍历一个…...

Python集合类型
目录 目标 版本 官方文档 集合分类 实战 创建 循环 常用方法 目标 掌握set和frozenset两种集合的使用方法,包括:创建、交集、并集、差集等操作。 版本 Python 3.12.0 官方文档 Set Types — set, frozensethttps://docs.python.org/3/library/s…...
npm install报错常用解题思路
最近刚接手一个“新”项目,让我很无语。明明是去年起的项目,但是它所用的部分技术栈非常旧,我启动项目,控制台一堆warning报错,然后项目结构也很让我不适应,很多地方都可以用文件夹包一下来方便定位。哎&am…...
conda: error: argument COMMAND: invalid choice
简介 使用conda activate 时,可能会报:conda: error: argument COMMAND: invalid choice: ‘activate’ (choose from ‘clean’, ‘compare’, ‘config’, ‘create’, ‘info’, ‘init’, ‘install’, ‘list’, ‘notices’, ‘package’, ‘remo…...

数仓成本下降近一半,StarRocks 存算分离助力云览科技业务出海
成都云览科技有限公司倾力打造了凤凰浏览器,专注于为海外用户提供服务,公司致力于构建一个全球性的数字内容连接入口,为用户带来更为优质、高效、个性化的浏览体验。 作为数据驱动的高科技公司,从数据中挖掘价值一直是公司核心任务…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

Xshell远程连接Kali(默认 | 私钥)Note版
前言:xshell远程连接,私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端
🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验
系列回顾: 在上一篇中,我们成功地为应用集成了数据库,并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了!但是,如果你仔细审视那些 API,会发现它们还很“粗糙”:有…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...