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; ( 火…

C++学习笔记(五十):c++ 移动语义与std::move

本节介绍c的移动语义与新特性std::move&#xff0c;本节介绍的内容主要用在性能优化上。 c移动语义和c左值右值的内容相关联&#xff0c;可以先看之前发的左值右值内容。 不使用移动语义的代码如下&#xff1a; #include <iostream> class String { public:String() …

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;大…

JavaScript 第十八章(条件语句深度解析)

条件语句在编程中扮演着至关重要的角色&#xff0c;它们允许我们根据不同的条件执行不同的代码路径。在JavaScript中&#xff0c;我们主要通过if、else、else if和switch语句来实现这一功能。 if语句 if语句是最基础的条件判断语句&#xff0c;它允许我们在条件为真时执行代码…

QFile文件操作方法

一.概述 QFile 类支持对文件进行读取、写入、删除、重命名、拷贝等操作&#xff0c;它既可以操作文件文件&#xff0c;也可以操作二进制文件。 二.QFile方法 1.使用 QFile 读写文件之前必须先打开文件&#xff0c;调用 open() 成员方法即可&#xff0c;常用的语法格式为&…

强化学习 - Trust Region Policy Optimization (TRPO)

什么是机器学习 Trust Region Policy Optimization&#xff08;TRPO&#xff09;是一种策略梯度方法&#xff0c;用于解决强化学习问题。TRPO旨在通过限制策略更新的大小&#xff0c;提高训练的稳定性。这样可以防止在参数空间中迅速迭代导致过大的更新&#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 把项目拷贝到…

大语言应用技术原理

大模型应用技术原理 RAG 向量数据库 对比 选型标准 开源vs.闭源vs. 源码可见客户端/SDK语言托管方式 self-hosted/on-premise redis,pgvector,milvusmanaged/cloud-native zilliz,pineconeembeded+cloud-native chroma,lanceDBself-hosted+cloud-native vald,drant,weaviate,vs…

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

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

git 基础操作

由于最近svn停止使用&#xff0c;github或gitlab等费用较高&#xff0c;所以最近尝试在本地用 git 现在本地进行代码管理。现总结一下 git 常用的操作命令和本地repository的创建步骤。 git init //初始化git status //查看文件夹状态git add . //添加文…

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

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

在 Redis 中使用 Lua 脚本执行复杂操作和事务

在 Redis 中使用 Lua 脚本执行复杂操作和事务 Redis 作为一个高性能的键值存储数据库&#xff0c;它的强大功能远不止于简单的数据存储和检索。Redis 自 2.6 版本起引入了对 Lua 脚本的支持&#xff0c;这意味着你可以在 Redis 服务器上直接运行 Lua 脚本。这一功能为执行复杂…

前端JavaScript篇之JavaScript 中如何进行隐式类型转换、加号(+)操作符什么时候用于字符串的拼接?为什么会有BigInt的提案?

目录 JavaScript 中如何进行隐式类型转换加法操作符&#xff08;&#xff09;比较操作符&#xff08;、>、<&#xff09;对象的隐式转换ToPrimitive 方法ToPrimitive 方法的作用ToPrimitive 方法的规则总结 加号&#xff08;&#xff09;操作符什么时候用于字符串的拼接&…

雨云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…

Python学习之路-Django基础:工程搭建

Python学习之路-Django基础:工程搭建 环境安装 创建虚拟环境 mkvirtualenv django_1.11.10 -p python3安装Django 使用Django 1.11.10版本 pip install django1.11.10创建工程 在使用Flask框架时&#xff0c;项目工程目录的组织与创建是需要我们自己手动创建完成的。在dj…