vue学习七

十四 pinia

官网:安装 | Pinia 中文文档

集中式状态管理,与vuex相似,提供变量存储便于数据共享。

从概念上类似于php中的session吧……

适用于少量数据的共享,可操作数据都是先定义后使用。

适用于判断用户是否登录,存储用户信息等。

在组件外使用存储 | Pinia 中文文档

安装

vue2

npm install pinia
npm install @vue/composition-api

vue3

npm install pinia

使用

main.js引入pinia

// import './assets/main.css'import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import { createPinia } from 'pinia'const app = createApp(App)
const pinia = createPinia()app.use(pinia)
app.use(router)
app.mount('#app')

设置文件store/test7.ts

import {defineStore} from "pinia"const useTest7Srore = defineStore("test7",{actions:{addnum(){if(this.num<=100){this.num+=this.n}else{console.log("num <= 100")}}},state:()=>{return {num:0,n:0}},getters:{getnum:(state)=>{return 'num:'+ state.num}}
})export default useTest7Srore

 引入defineStore,定义唯一名称作为第一个参数传递。

state设置存储变量,返回对象。

getters设置方法接收变量并处理。

actions设置方法便于处理业务逻辑。

最后向外部暴露。

可以多个逻辑设置多个文件,有点像hooks,可将重复的业务提取出来,减少重复编写。

vue文件调用

<script lang="ts" setup>import { ref } from 'vue'import useTest7Srore from "@/store/test7.ts"import Test8 from "./Test8.vue"let test7store = useTest7Srore()function addn(){test7store.n = Math.floor(Math.random() * 10) + 1// test7store.num +=test7store.ntest7store.addnum()console.log(test7store.getnum)}
</script><template name="Test7">
<div><div class="main"><div class="div1"><p>num:{{test7store.num}} &nbsp;&nbsp; n:{{test7store.n}}</p><p><button @click="addn" class="btn1">addn</button></p></div><Test8></Test8></div>
</div>    
</template><style scoped>.main{width: 80%;padding: 1em;margin: 0 auto;}.div1{background-image:linear-gradient(#accbee ,#e7f0fd 100%);height: 200px;border-radius: 30px;padding: 1em;}.btn1{height: 30px;background-image:linear-gradient(#1e3c72 ,#2a5298 100%);color: #fff;border: none;border-radius: 5px;}
</style>

 定义的pinia仓库返回reactive对象,也就是例子中test7store是reactive对象。

获取state中的定义变量应该是test7store.$state.num,但是reactive对象会对其中定义ref()对象拆包处理,所以直接写test7store.num也是对的。

可以调用其中自己封装的方法addnum改变num值,或者调用getnum或者num值。

例子中存数据使用test7store.addnum(),读数据使用test7store.getnum、test7store.num、test7store.n。

存数据方式

第一种: 变量直接操作,比如test7store.num+1。

第二种:批量变更。

test7store.$path({num:1,n:10
})

和第一种的区别是,第一种调用几次则修改几次,$path是一起执行。

第三种:使用actions中自己封装的方法,比如test7store.addnum()。

第三种的优点在于适合处理业务逻辑。

从维护方面,变量修改都写在封装方法里面,可能好维护。

actions中可以使用this,this是当前的store。

十五 storeToRefs

便于pinia的数据读取,可以结构pinia定义的存储库暴露的变量。

官方文档:storeToRefs() | Pinia

定义

import {defineStore} from "pinia"
import { reactive } from 'vue'//组合式
export const useTest8Srore =  defineStore('test8', ()=>{let list = reactive(localStorage.getItem('list')?JSON.parse(localStorage.getItem('list')):[]);//响应式数据function pushlist(info){list.push(info)}return {list,pushlist}
});
export default useTest8Srore

使用

<script lang="ts" setup>
import useTest8Srore from "@/store/test8"
import { storeToRefs } from "pinia"let test8Srore = useTest8Srore()
let {list} =  storeToRefs(test8Srore)
//list 是响应式数据</script><template><div><div><p v-for="(value,index)  in list" :key="index">{{value}}</p></div></div>
</template>

就是解构pinia的数据,组件直接使用,数据为响应式。

和toRefs比,仅将暴露数据中的变量变为响应式。

十六 $subscribe

官网:Plugins | Pinia

官网还提到$onAction。

两者都是起到监听作用:

  • $subscribe 监听数据变化
  • $onAction 监听方法调用

定义参考上述store/test7.ts文件。

调用

<script lang="ts" setup>import { ref } from 'vue'import useTest7Srore from "@/store/test7.ts"import Test8 from "./Test8.vue"// let n = ref(0)// let num = ref(0)let test7store = useTest7Srore()function addn(){test7store.n = Math.floor(Math.random() * 10) + 1// test7store.num +=test7store.ntest7store.addnum()console.log(test7store.getnum)}test7store.$subscribe((state, getters) => {console.log(state)console.log(getters)})test7store.$onAction(({ name, store, after, args, payload }) => {console.log(name)console.log(store)console.log(after)console.log(args)console.log(payload)})
</script><template name="Test7">
<div><div class="main"><div class="div1"><p>num:{{test7store.num}} &nbsp;&nbsp; n:{{test7store.n}}</p><p><button @click="addn" class="btn1">addn</button></p></div><Test8></Test8></div>
</div>    
</template><style scoped>.main{width: 80%;padding: 1em;margin: 0 auto;}.div1{background-image:linear-gradient(#accbee ,#e7f0fd 100%);height: 200px;border-radius: 30px;padding: 1em;}.btn1{height: 30px;background-image:linear-gradient(#1e3c72 ,#2a5298 100%);color: #fff;border: none;border-radius: 5px;}
</style>

点击addn按钮console输出

//onAction 部分
addnum
Test7.vue:20 Proxy(Object) {$id: 'test7', $onAction: ƒ, $patch: ƒ, $reset: ƒ, $subscribe: ƒ, …}
Test7.vue:21 ƒ after(callback) {afterCallbackList.push(callback);}
Test7.vue:22 []
Test7.vue:23 undefinedTest7.vue:12 num:3//subscribe 部分
Test7.vue:15 {storeId: 'test7', type: 'direct', events: {…}}
Test7.vue:16 Proxy(Object) {num: 3, n: 3}

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

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

相关文章

【Prometheus】prometheus服务发现与relabel原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

【折线图 Line】——1

🌟 解锁数据可视化的魔法钥匙 —— pyecharts实战指南 🌟 在这个数据为王的时代,每一次点击、每一次交易、每一份报告背后都隐藏着无尽的故事与洞察。但你是否曾苦恼于如何将这些冰冷的数据转化为直观、吸引人的视觉盛宴? 🔥 欢迎来到《pyecharts图形绘制大师班》 �…

004-利用Docker安装Mysql

利用Docker安装Mysql 一、在镜像仓库找到 Mysql1.镜像仓库地址2.复制命令3.下载Mysql镜像4.查看镜像 二、创建实例并启动三、用本地工具连接数据库四、设置 Mysql 配置 一、在镜像仓库找到 Mysql 1.镜像仓库地址 https://hub.docker.com 2.复制命令 docker pull mysql:8.0…

当JMeter遇见AI:性能测试进入智能时代(附实战案例)

性能测试作为软件开发中的关键环节&#xff0c;确保系统在高负载下仍能高效运行。JMeter 是一种广泛使用的开源工具&#xff0c;用于负载测试和性能测量&#xff0c;但传统方法往往效率低下。AI 的引入&#xff0c;为性能测试带来了智能化升级。本文将探讨 JMeter 与 AI 的结合…

DeepSeek R1 + 飞书机器人实现AI智能助手

效果 TFChat项目地址 https://github.com/fish2018/TFChat 腾讯大模型知识引擎用的是DeepSeek R1&#xff0c;项目为sanic和redis实现&#xff0c;利用httpx异步处理流式响应&#xff0c;同时使用buffer来避免频繁调用飞书接口更新卡片的网络耗时。为了进一步减少网络IO消耗&…

多样化的化学结构式表示法

化学结构式是用元素符号和短线表示化合物&#xff08;或单质&#xff09;分子中原子的排列和结合方式的式子&#xff0c;它具有多方面的重要含义&#xff0c;具体如下&#xff1a; 表示原子组成及种类体现原子的连接顺序和方式反映分子的空间构型揭示化学性质和反应机理用于化…

Vmvare虚拟机使用代理

1. 宿主机配置 宿主机配置好网络&#xff0c;能访问google&#xff0c;然后开启局域网代理 记录下宿主机的真实网卡的ip地址及代理服务的端口号 例如 192.168.101.120:52209 2. 虚拟机配置 vmvare网络连接设置 虚拟机网络连接选择nat模式 终端环境变量设置 终端只需设置以下…

Claude 3.7 Sonnet深度解析:混合推理模型如何重塑AI编程能力

引言 2025年2月25日&#xff0c;人工智能领域领先企业Anthropic正式发布了新一代大语言模型Claude 3.7 Sonnet。作为全球首个混合推理AI模型&#xff0c;Claude 3.7 Sonnet在编程开发、逻辑推理以及任务处理效率等方面实现了突破性进展。本文将从核心特性、性能评测、竞品对比…

USRP6330-通用软件无线电平台

1、产品描述 USRP6330平台以XILINX XCZU15EG SOC处理器为核心&#xff0c;搭配两片ADI ADRV9026射频集成芯片&#xff0c;提供了瞬时带宽高达200MHz的8收8发射频通道。通过驯服的高精度GPSDO时钟参考方案&#xff0c;USRP可以支持高性能的MIMO通信系统&#xff0c;提供了部署大…

26.[前端开发-JavaScript基础]Day03-循环语句

一、JavaScript循环语句 1 认识循环语句 认识循环 2 while循环 while循环 while循环的练习 3 do..while循环 do..while循环 4 for循环(循环嵌套 ) for循环 for循环的练习 for循环的嵌套 5 break 、continue 循环控制 6 综合案例练习 猜数字游戏 循环的总结

/ɪ/音的字母或字母组合的单词

a. 字母i, y在闭音节和非重读音节中发/ɪ/&#xff0c;例词&#xff1a; bit /bɪt/ adj. 很小的kiss /kɪs/ vi. 接吻list /lɪst/ n. 目录ship /ʃɪp/ n. 船kick /kɪk/ vt. 踢fill /fɪl/ vt. 装满mirror /mɪrə/ n. 镜子chicken /tʃɪkɪn/ n. 鸡肉pity /pɪtɪ/ n. 怜…

一文弄懂TCP断开连接时候的四次挥手

部分内容来源&#xff1a;小林coding TCP四次挥手过程是怎样的 天下没有不散的宴席&#xff0c;对于 TCP 连接也是这样&#xff0c; TCP 断开连接是通过四次挥手方式 双方都可以主动断开连接&#xff0c;断开连接后主机中的「资源」将被释放&#xff0c;四次挥手的过程如下图…

小程序画带圆角的圆形进度条

老的API <canvas id"{{canvasId}}" canvas-id"{{canvasId}}" style"opacity: 0;" class"canvas"/> startDraw() {const { canvasId } this.dataconst query this.createSelectorQuery()query.select(#${canvasId}).bounding…

数据结构:二叉树的链式结构及相关算法详解

目录 一.链式结构的实现 1.二叉树结点基本结构&#xff0c;初始化与销毁&#xff1a; 二.链式结构二叉树的几种遍历算法 1.几种算法的简单区分&#xff1a; 2.前序遍历&#xff1a; 3.中序遍历&#xff1a; 4.后序遍历&#xff1a; 5.层序遍历&#xff08;广度优先遍历B…

WebRTC与PJSIP:呼叫中心系统技术选型指南

助力企业构建高效、灵活的通信解决方案 在数字化时代&#xff0c;呼叫中心系统的技术选型直接影响客户服务效率和业务扩展能力。WebRTC与PJSIP作为两大主流通信技术&#xff0c;各有其核心优势与适用场景。本文从功能、成本、开发门槛等维度为您深度解析&#xff0c;助您精准匹…

cuda-12.4.0 devel docker 中源码安装 OpenAI triton

1&#xff0c;准备 docker 容器 下载docker image: $ sudo docker pull nvidia/cuda:12.6.2-devel-ubuntu20.04 创建容器&#xff1a; sudo docker run --gpus all -it --name cuda_LHL_01 -v /home/hongleili/ex_triton/tmp1:/root/ex_triton/tmp1 nvidia/cuda:12.6…

Zookeeper(67) Zookeeper在HBase中的应用是什么?

Zookeeper 在 HBase 中起到了至关重要的作用&#xff0c;主要用于协调和管理 HBase 集群中的多个组件。具体来说&#xff0c;Zookeeper 在 HBase 中的应用包括以下几个方面&#xff1a; Master 选举&#xff1a;HBase 集群中可以有多个 Master 节点&#xff0c;但只有一个处于…

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求&#xff1a;用户需要为日期选择器的每个日期单元格添加一个Tooltip&#xff0c;当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码&#xff0c;确保Tooltip正确显示&#xff0c;并且数据…

由 JRE 软链接依赖引发的故障排查

最近工作查到了一个有意思的问题&#xff0c;在这里记录一下。 1. 问题背景 Java应用 SAP 系统自带了一个 jre&#xff0c;但在Ubutnu2004上部分功能不正常。 初步排查发现&#xff0c;该 JRE 版本来源不明&#xff08;用户也说不清是哪里来的&#xff09;。 于是尝试以下方…

2-3文件的属性信息

文章目录 1 file命令2 stat命令 1 file命令 用来识别文件类型 # 参数的位置是任意的 file 文件名 [参数]-b 只显示文件类型和文件编码&#xff0c;不显示文件名-i 显示文件的MIME类型-F 设置输出字符串的分隔符-L 查看软链接文件自身文件属性liyblyb:/tmp$ file xxxtmp.log …