vue之pinia存储和读取数据

我们已经搭建好了pinia的环境,现在我们使用pinia来存储和读取数据。Pinia是Vue的状态管理库,允许在Vue组件之间共享状态。

vue的pinia环境搭建 

创建一个store文件,包含count.ts和lovetalk.ts,存储数据

import { defineStore } from "pinia";export const usecountstore=defineStore('Count',{//真正存储数据的地方state(){return{sum:6}}
})
import { defineStore } from "pinia";
import { reactive } from "vue";export const usetalkstore=defineStore('talk',{//真正存储数据的地方state(){return{talklist:[  {id:'01',title:'你今天有点怪,怪好看'},  {id:'02',title:'草莓,蓝莓,今天想我没'},  {id:'03',title:'心理给你留了一块地,我的死心塌地'},  {id:'04',title:'你好,可以问条路么,通往你心里的路怎么走'}  ]}}
})

 在vue文件中读取store数据

// 导入usecountstore函数,用于获取和设置求和数据    
import { usecountstore } from '../store/count';  
// 使用usecountstore函数获取countstore对象,用于存储和操作求和数据  const countstore = usecountstore();  
   // 导入usetalkstore函数,用于获取和设置情话列表数据  import { usetalkstore } from '../store/lovetalk';  // 使用reactive函数创建一个响应式的数据对象,并初始化为usetalkstore函数返回的数据  const talk = reactive(usetalkstore());  

还是可以正常显示,读取pinia的数据:

 通过vue插件可以看到实现pinia存储数据

 

通过控制台可以看到我们为组件安装了这两个store文件

 

 pinia修改数据;

pinia是符合直觉的vue.js状态管理库,支持拿到数据直接改

   function add() {  // 定义一个add方法,用于将用户选择的数字加到当前求和的结果上  countstore.sum+= n.value;  // 将n的值加到count的值上,并更新count的值  }  

pinia修改数据的三种方法:

1、直接 通过const countstore = usecountstore(); 拿到的数据就改,实现方便,维护比较麻烦。

 //    第一种修改方法,实现简单countstore.sum+= n.value; countstore.school='哔哩哔哩大学',countstore.tel='1237238932' 

 2、通过countstore的$patch方法实现批量修改

 // //第二种修改方法 批量数据变更countstore.$patch({sum:98,school:'哔哩哔哩大学',tel:'1237238932'})

3、通过countstore的actions去修改,要在存放数据的.ts文件里面实现actions里面的方法,然后在组件中调用。适合模块化开发,代码复用。这里我只写了sum修改的方法。

   //actions 里面放置的是一个一个的方法,响应组件的动作actions:{set(value){this.sum+=value,this.school='哔哩哔哩大学',this.tel='1237238932'}}
        //第三种修改方法,模块化开发代码复用用第三种,后期维护方便countstore.set(n.value)

 storeToRefs:使替换变量仍然是响应式数据

只关注store里面的数据,如果用toRefs则countstore所有的东西都变成Ref对象

    import { storeToRefs } from 'pinia';   
//storeToRefs只会关注store里面的数据const {sum,school,tel}=storeToRefs(countstore)

通过这样之后:模板代码可以简写

   <h2>当前求和为:{{sum}}</h2>  <h2>学校:{{ school}}</h2><h2>tel:{{ tel }}</h2>

而不用这样:

 <h2>当前求和为:{{countstore.sum}}</h2>  <h2>学校:{{ countstore.school}}</h2><h2>tel:{{ countstore.tel }}</h2>

getters:(相当于可共享的计算属性)

                        

   getters:{//可共享的计算属性bigSum(state){return state.sum*10},toUpper(state){return state.school.toUpperCase()}}
    const {sum,school,tel,bigSum,toUpper}=storeToRefs(countstore)

 $subscribe,和watch有点像,监听状态变化

 //和监视器watch有点像talk.$subscribe((mutate,state)=>{console.log('talklist里面保存的数据发生了改变',mutate,state)localStorage.setItem('talkList',JSON.stringify(state.talklist))})

                ​​​​​​​        ​​​​​​​        ​​​​​​​ 

   state(){return{// talklist:[  //     {id:'01',title:'你今天有点怪,怪好看'},  //     {id:'02',title:'草莓,蓝莓,今天想我没'},  //     {id:'03',title:'心理给你留了一块地,我的死心塌地'},  //     {id:'04',title:'你好,可以问条路么,通往你心里的路怎么走'}  // ]talkList:JSON.parse(localStorage.getItem('talkList') as string)||[]}}

 在 Vue.js 和 Pinia 中,$subscribe 和 watch 都是用来监听状态变化的,但它们在使用方式和上下文中有一些不同。
watch:
watch 是 Vue.js 的一个内置指令,也可以在 Pinia 中使用。
它用于观察一个表达式的值的变化,并在发生变化时执行回调。
watch 可以观察 Vue 实例上的数据变动,也可以观察普通的 JavaScript 对象。
当被侦听的数据变化时,watch 回调会被执行。

$subscribe:
$subscribe 通常不是 Vue 或 Pinia 的内置方法,而是被一些第三方库或自定义代码所使用。
它用于订阅状态管理库中的特定事件或变化。
$subscribe 通常需要一个回调函数作为参数,当状态变化发生时,这个回调函数会被调用。
$subscribe 通常用于更细粒度的状态管理,比如订阅特定的状态更新而不是整个数据对象的变化。

 代码:

选项式:

lovetalk.ts

import axios from "axios";
import { nanoid } from "nanoid";
import { defineStore } from "pinia";
import { json } from "stream/consumers";
import { reactive } from "vue";export const usetalkstore=defineStore('talk',{actions:{async  getATalk() {  // 向指定的URL发送GET请求,并使用连续解构赋值和重命名获取返回的内容中的标题字段  let { data: { content: title } } = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json');  // 创建一个新的对象,包含一个唯一的ID和一个标题,并把这个对象包装成一个字符串格式的文本数据  let obj = { id: nanoid(), title };  // 把新创建的对象添加到talklist数组的开头位置(这里缺少了将obj添加到talk.talklist的代码)  this.talkList.unshift(obj)}  },//真正存储数据的地方state(){return{// talklist:[  //     {id:'01',title:'你今天有点怪,怪好看'},  //     {id:'02',title:'草莓,蓝莓,今天想我没'},  //     {id:'03',title:'心理给你留了一块地,我的死心塌地'},  //     {id:'04',title:'你好,可以问条路么,通往你心里的路怎么走'}  // ]talkList:JSON.parse(localStorage.getItem('talkList') as string)||[]}}
})

 count.ts

import { defineStore } from "pinia";
import { start } from "repl";export const usecountstore=defineStore('Count',{//actions 里面放置的是一个一个的方法,响应组件的动作actions:{set(value){this.sum+=value,this.school='哔哩哔哩大学',this.tel='1237238932'}},//真正存储数据的地方state(){return{sum:6,school:'湖南某高校xml',tel:'17837483xx',}},getters:{//可共享的计算属性bigSum(state){return state.sum*10},toUpper(state){return state.school.toUpperCase()}}
})

组合式:

lovetalk.ts:

import axios from "axios";
import { nanoid } from "nanoid";
import { defineStore } from "pinia";
import { json } from "stream/consumers";
import { reactive } from "vue";export const usetalkstore=defineStore('talk',()=>{//talkList就是stateconst talkList=reactive(JSON.parse(localStorage.getItem('talkList') as string)||[])//getATalk就是actionsasync function getATalk() {  // 向指定的URL发送GET请求,并使用连续解构赋值和重命名获取返回的内容中的标题字段  let { data: { content: title } } = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json');  // 创建一个新的对象,包含一个唯一的ID和一个标题,并把这个对象包装成一个字符串格式的文本数据  let obj = { id: nanoid(), title };  // 把新创建的对象添加到talklist数组的开头位置(这里缺少了将obj添加到talk.talklist的代码)  talkList.unshift(obj)}  return{talkList,getATalk}})

count.ts:

import { defineStore } from "pinia";
import { start } from "repl";
import { computed, ref } from "vue";export const usecountstore=defineStore('Count',()=>{const sum=ref(6)const school=ref('湖南某高校xml')const tel=ref('17837483xx')function  set(value){this.sum+=value,this.school='哔哩哔哩大学',this.tel='1237238932'}return{sum,school,tel,set}
})

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

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

相关文章

签到业务流程

1.技术选型 Redis主写入查询&#xff0c;Mysql辅助查询&#xff0c;传统签到多数都是直接采用mysql为存储DB,在大数据的情况下数据库的压力较大.查询速率也会随着数据量增大而增加.所以在需求定稿以后查阅了很多签到实现方式,发现用redis做签到会有很大的优势.本功能主要用到r…

python222网站实战(SpringBoot+SpringSecurity+MybatisPlus+thymeleaf+layui)-自定义帖子管理实现

锋哥原创的SpringbootLayui python222网站实战&#xff1a; python222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火爆连载更新中... )_哔哩哔哩_bilibilipython222网站实战课程视频教程&#xff08;SpringBootPython爬虫实战&#xff09; ( 火…

Django学习之小试牛刀

六、Django学习之小试牛刀 其他关于Python Web开发笔记&#xff1a;&#xff08;如果遇到问题可以一起交流~&#xff09; 一、Flask学习之HTML-CSDN博客 二、Flask学习之CSS-CSDN博客 【接上篇】二、Flask学习之CSS&#xff08;下篇&#xff09;-CSDN博客 三、Flask学习之B…

面试题:Spring在多线程环境下如何确保事务一致性

文章目录 问题在现如何解决异步执行多线程环境下如何确保事务一致性事务回顾事务实现方式回顾编程式事务那么编程式事务是什么样子呢&#xff1f; 利用编程式事务解决问题问题分析完了&#xff0c;那么如何解决问题呢&#xff1f;总结 问题在现 我先把问题抛出来&#xff0c;大…

LandrayOA内存调优 / JAVA内存调优 / Tomcat web.xml 超时时间调优实战

目录 一、背景说明 二、LandrayOA / Tomcat 内存调优 2.1 \win64\tomcat\conf\web.xml 文件调优 2.2 \win64\tomcat\bin\catalina64.bat 文件调优 一、背景说明 随着系统的使用时间越来越长&#xff0c;数据量越多&#xff0c;发现系统的有些功能越来越慢&…

基于InceptionV2/InceptionV3/Xception不同参数量级模型开发构建中草药图像识别分析系统,实验量化对比不同模型性能

最近正好项目中在做一些识别相关的内容&#xff0c;我也陆陆续续写了一些实验性质的博文用于对自己使用过的模型进行真实数据的评测对比分析&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《移动端轻量级模型开发谁更胜一筹&#xff0c;efficientnet、mobilenetv2、…

ubuntu 22 安装 node,npm,vue

1:安装 nodejs sudo apt update curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt update && sudo apt install -y nodejs node -v 2:安装npm sudo npm install n -g npm -v 3:安装vite npm install vite -g 4:运行vue 把项目拷贝到…

OpenAI正式推出GPT商店 ChatGPT团队订阅服务一并推出

2024年1月11日消息&#xff0c;据外媒报道&#xff0c;如上周在给开发者的邮件中所宣布的一样&#xff0c;因ChatGPT而名声大噪的人工智能公司OpenAI&#xff0c;在本周正式推出了GPT商店&#xff0c;供用户分享和发现个性化的ChatGPT&#xff0c;同时他们也推出了面向各种不同…

用C语言实现贪吃蛇游戏!!!

前言 大家好呀&#xff0c;我是Humble&#xff0c;不知不觉在CSND分享自己学过的C语言知识已经有三个多月了&#xff0c;从开始的C语言常见语法概念说到C语言的数据结构今天用C语言实现贪吃蛇已经有30余篇博客的内容&#xff0c;也希望这些内容可以帮助到各位正在阅读的小伙伴…

雨云VPS搭建PalWorld服务器,幻兽帕鲁开服联机教程(Windows),0基础保姆级教程

雨云VPS用Windows系统搭建幻兽帕鲁私服&#xff0c;PalWorld开服联机教程&#xff0c;零基础保姆级教程&#xff0c;本教程使用一键脚本来搭建幻兽帕鲁服务端&#xff0c;并讲了如何配置游戏参数&#xff0c;如何更新服务端等。 最近这游戏挺火&#xff0c;很多人想跟朋友联机…

实体关系抽取与属性补全的技术浅析

目录 前言1. 实体关系抽取2 实体关系抽取的方法2.1 基于模板的方法2.2 基于监督学习的关系抽取2.3 基于深度学习的关系抽取2.4 基于预训练语言模型的关系抽取 3 属性补全3.1 属性补全任务简介3.1 抽取式属性补全3.2 生成式属性补全 4 未来发展趋势结语 前言 在信息爆炸时代&am…

用甘特图有效管理多个项目进度

当公司或组织同时承担多个项目时,合理规划各项目的时间节点与资源分配对确保高效完成至关重要。采用甘特图可以直观地展示多个项目的时间进程、关键里程碑以及资源分配情况,便于从宏观层面全面把控各项目的动态。 在线甘特图软件 zz-plan.com 提供了非常强大的时间轴规划功能,支…

漏洞复现-万户OA text2Html 任意文件读取(附漏洞检测脚本)

免责声明 文章中涉及的漏洞均已修复&#xff0c;敏感信息均已做打码处理&#xff0c;文章仅做经验分享用途&#xff0c;切勿当真&#xff0c;未授权的攻击属于非法行为&#xff01;文章中敏感信息均已做多层打马处理。传播、利用本文章所提供的信息而造成的任何直接或者间接的…

Cesium介绍及3DTiles数据加载时添加光照效果对比

一、Cesium简介 Cesium原意是化学元素铯&#xff0c;铯是制造原子钟的关键元素&#xff0c;通过命名强调了Cesium产品专注于基于时空数据的实时可视化应用。熟悉GIS开发领域的读者都知道&#xff0c;Cesium是一个用于创建3D地理空间应用程序的开源JavaScript库&#xff0c;它允…

《SPSS统计学基础与实证研究应用精解》视频讲解:数据缺失值处理

《SPSS统计学基础与实证研究应用精解》4.12 视频讲解 视频为《SPSS统计学基础与实证研究应用精解》张甜 杨维忠著 清华大学出版社 一书的随书赠送视频讲解4.12节内容。本书已正式出版上市&#xff0c;当当、京东、淘宝等平台热销中&#xff0c;搜索书名即可。本书旨在手把手教会…

GraphicsMagick 的 OpenCL 开发记录(二十五)

文章目录 如何修复R6025 pure virtual function call问题 <2022-04-19 周二> 如何修复R6025 pure virtual function call问题 运气好&#xff0c;修复了这个问题。即&#xff0c;在ExitInstance()函数中调用一下MagickLib::DestroyMagick();即可。 过程中也经历了尝试…

用友U8接口-部署和简要说明(1)

概括 本专栏文章目的说明对目前用友U8ERP接口介绍对底层接口二次封装的介绍 说明 过去发布过介绍U8接口文章简介&#xff0c;参考以下链接。 U8接口开发方式 本专栏文章与下面的HTTP接口相辅相成&#xff0c;主要是写给正在使用&#xff0c;或未来使用本套接口的开发人员&am…

JDK8新特性(二)

接着上一章&#xff0c;我们继续学习jdk8新特性 目录 一、Optional 1.使用 1.1创建对象 1.2安全消费值 1.3获取值 1.4安全获取值 1.5过滤 1.6判断 1.7数据转换 二、函数式接口 1.常见函数式接口 2.常用的默认方法 三、方法引用 1. 推荐用法 2.基本格式 3.语法详解…

ESP32 操作AT24C32或AT24C64

AT24C32或AT24C64两款芯片容量不一样&#xff0c;其他都一样。程序无法动态识别容量AT24C32容量32K&#xff0c;地址范围0x~0x7FFF.AT24C64容量64K,地址范围0x~0xFFFF 电气参数 电压2.7V-5.5V IIC通信 有引脚控制数据保护 有引脚可以配置IIC的地址。 每个page 32字节 1百…

二叉树计算 - 华为OD统一考试

OD统一考试&#xff08;C卷&#xff09; 分值&#xff1a; 200分 题解&#xff1a; Java / Python / C 题目描述 给出一个二叉树如下图所示&#xff1a; 6 / \ 7 9 \ / -2 6 请由该二叉树生成一个新的二叉树&#xff0c;它满足其树中的每个节点将包含原始树中的左子树和右子树…