045、Vue3+TypeScript基础,pinia库中使用$subscribe订阅数据变动

news/2024/11/18 2:24:37/文章来源:https://www.cnblogs.com/tianpan2019/p/18374857

01、main.js代码如下:

// 引入createApp用于创建Vue实例
import {createApp} from 'vue'
// 引入App.vue根组件
import App from './App.vue'//第一步:引入pinia
import {createPinia} from 'pinia'const app = createApp(App);//第二步:创建pinia实例
const pinia = createPinia()
//第三步:将pinia实例挂载到Vue实例上
app.use(pinia)// App.vue的根元素id为app
app.mount('#app')

02、App.vue代码如下:

<template><div class="app"><h2 class="title">App.Vue</h2><!--    <Page1/>--><br><Page2/></div>
</template><script lang="ts" setup name="App">
// import Page1 from "@/view/Page1.vue";
import Page2 from "@/view/Page2.vue";
</script><style scoped>
.app {background-color: #ddd;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;
}.nav-button {display: inline-block; /* 让链接显示为块级元素,以便应用宽度和高度 */padding: 10px 20px; /* 内边距 */margin: 0 5px; /* 外边距,用于按钮之间的间隔 */text-decoration: none; /* 移除下划线 */color: white; /* 文本颜色 */background-color: #007bff; /* 背景颜色 */border-radius: 5px; /* 边框圆角 */transition: background-color 0.3s; /* 平滑过渡效果 */
}.nav-button:hover {background-color: #0056b3; /* 鼠标悬停时的背景颜色 */
}.nav-button.router-link-active {background-color: #28a745; /* 当前激活(路由匹配)时的背景颜色 */
}.mai-content {/* 添加边框样式 */border: 2px solid #000; /* 边框宽度、样式和颜色 */border-radius: 5px; /* 可选:添加边框圆角 */padding: 20px; /* 可选:给内部内容添加一些内边距 */margin: 20px; /* 可选:给元素添加一些外边距,以便与其他元素隔开 */
}
</style>

03、Page2.vue代码如下:

<template><div class="mypage"><button @click="getLoveTalk">获取一句土味情话</button><ul><li v-for="talk in talklist":key="talk.id">{{ talk.id }} -- {{ talk.title }}</li><br></ul></div>
</template><script lang="ts" name="page2" setup>
import {usesTalkStore} from "@/store/myTalk";
import {storeToRefs} from "pinia";const myTalkStore = usesTalkStore();
//从myTalkStore去除talklist
const {talklist} = storeToRefs(myTalkStore);myTalkStore.$subscribe((mutation, state) => {console.log('myTalkStore数据变化', mutation, state.talklist)localStorage.setItem("talklist", JSON.stringify(state.talklist))
})function getLoveTalk() {myTalkStore.getLoveTalk()
}</script>
<style scoped>
.mypage {background-color: #ddd;box-shadow: 0 0 10px;border-radius: 10px;padding: 20px;button {margin: 0 5px;}
}
</style>

04、myTalk.ts代码如下:

import {defineStore} from 'pinia'
import axios from 'axios'
import {nanoid} from 'nanoid'export const usesTalkStore = defineStore('talk', {actions: {async getLoveTalk() {// 调用接口,获取情话let result = await axios.get('https://api.uomg.com/api/rand.qinghua?format=json')let obj = {id: nanoid(), title: result.data.content}this.talklist.unshift(obj)},},//真正存储数据的地方
    state() {return {// 加上|| [],规避为空的情况
            talklist: JSON.parse(localStorage.getItem('talkList') as string) || []}}
})

05、效果如下:

 06、效果如下:

 

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

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

相关文章

爬虫案例1-爬取图片的三种方式之一:DrissionPage篇(3)

继requests篇和selenium篇,本文是爬取图片的最后一个案例,利用了python第三方库DrissionPage来自动化爬取图片。当然,爬取图片肯定不止这三种方法,还有基于python的scrapy框架,基于node.js的express框架以及基于Java的webmagic框架等等。 DrissionPage和selenium相似,都是…

HtmlUnit:自动化操作web页面的java工具

java有httpclient等工具,可以模拟进行一些web操作,但一些逻辑是在前端js中执行的,此时httpclient就比较困难了。 此时可以考虑使用HtmlUnit,模拟出一个浏览器,全程在浏览器中操作。本文以 在百度中输入搜索关键字->点击“百度一下” 按钮->打印搜索结果 这一过程为例…

nginx代理服务

Nginx****代理服务代理区别 区别在于代理的对象不⼀样 正向代理代理的对象是客户端 反向代理代理的对象是服务端 2.Nginx****负载均衡2.2Nginx****负载均衡状态配置 backup max_conns 测试 backup 以及 down 状态 当⼀个后端服务器被标记为 backup 时,它将仅作为备⽤服务器使⽤…

声音克隆GPT-SoVITS 2.0软件和详细的使用教程!

天命人,请允许我先蹭个热点! 原始声音: 播放 克隆声音: 播放 文章写了一半,被《黑神话悟空》刷屏了。突发奇想,用里面的声音来做个素材试试看。B站捞了一点声音素材,随便剪一剪,训练一把过,没有调优,就直接拿来用了。情绪还差点意思,音色克隆的还不错。 下面进入正…

手机轰炸机 短信轰炸 可匣 二90二1243交流

使用 fiddler 抓包 获取到了 100+个 发送短信验证的接口 使用自己手机试了一下 速度非常快。因为是同时迸发,所以导致手机短信量一瞬间到了100+ 但是会导致一个问题,就是无感知情况 于是调整接口请求方式,设置异步请求,间隔3s钟,这次以后会达到一个比较好的效果 没办法上传…

元宇宙虚拟展厅_元宇宙线上展馆制作成本有哪些?

在元宇宙中制作虚拟展厅的成本可能因多种因素而有很大差异,包括复杂程度、定制、大小、平台以及所提供的支持和服务水平,企业在决定是否在元宇宙中制作虚拟展厅时应仔细考虑自身需求和预算,并应寻找经验丰富的开发公司和具有成功合作的平台,以确保获得最佳结果.目前,3DCAT已…

利用两个IO口检测6个按键

利用两个IO口检测6个按键用两个IO口扫描6个按键,原理图与扫描程序。 先贴上原理图:以下为思路: 将两个IO口配置为上拉输出(STM32中)或者初始化输出高电平、 1、首先:IO1,IO2输出高电平。 S1按下,电流方向由R1流向GND,此时IO1为低电平。S2按下,电流方向由R2流向GND,此…

织梦dedecms上传服务器后数据连接失败怎么办

当织梦DeDeCMS上传到服务器后出现数据连接失败的问题时,可以采取以下几个步骤来解决这个问题: 1. 检查数据库连接信息打开common.inc.php文件:在织梦CMS的 data 文件夹中找到 common.inc.php 文件。 修改数据库连接信息:数据库服务器地址:确认数据库服务器地址是否正确,例…

织梦DEDECMS怎么实现鼠标移到标题显示完整的title

在织梦DeDeCMS中,实现鼠标移到标题时显示完整的title可以通过修改模板文件中的标签来完成。下面是一种简单的方法来实现这一功能:步骤 1: 找到需要修改的模板文件 打开您需要修改的模板文件,通常这些文件位于 templets 文件夹中。 寻找包含文章标题的地方,例如在列表页模板…

帝国cms如何隐藏前台信息数据

帝国CMS隐藏前台信息数据的方法 隐藏数据库信息在 e/config/config.php 中找到 AllowShowData 参数并将其设置为 false。 登录后台,在 系统管理 → 系统配置 中,选择 栏目 选项卡,将 显示记录数 和 显示栏目索引 设置为 0。隐藏后台登录页面在 e/config/config.php 中找到 a…

织梦dedecms简单吗

织梦DeDeCMS是一款简单且实用的开源网站管理系统,它非常适合个人站长、中小企业和学校等用户使用。以下是织梦DeDeCMS的一些特点,说明它的简单性: 简单安装一键安装:织梦CMS提供了一键安装功能,只需要按照提示完成几步即可快速安装。 无需专业知识:安装过程简单直观,不需…

RocketMQ 的 NameServer 架构解析

RocketMQ的逻辑部署图NameServer核心架构图NamesServer 提供的功能有:Topic 路由信息的管理:NameServer 负责存储和维护 Topic 的路由信息。 Producer 和 Consumer 可以从 NameServer 获取到当前有效的 Broker 的地址和相应的 Topic 分布情况。 每个 Broker 在启动时会向所有…