vue3 vite 两种监听pinia状态变化的方式比较:watch, $subscribe

首先搭建vue3 vite 项目

npm create vue

选择pinia 或者自己安装pinia

自己安装需要

npm install pinia

并在main.js中挂在上:

const pinia = createPinia()
const app = createApp(App)
app.use(pinia)
app.mount('#app')

创建stores文件夹和counter.js文件

在这里插入图片描述

counter.js中的内容如下:

import { ref, computed } from 'vue'
import { defineStore } from 'pinia'

export const useCounterStore = defineStore('counter', () => {
    const count = ref(0)
    const other_counts = ref(0)
    
    const doubleCount = computed(() => count.value * 2)
    function increment() {
        count.value++
        console.log(count.value)
    }
    // 分别设置不同的计时器
    setInterval(()=>{
        count.value = count.value+1
    },1000)
    
    // 分别设置不同的计时器
    setInterval(()=>{
        other_counts.value = other_counts.value+1
    }, 3000)
	// 一定要返回 count, other_counts 不然监听不到
    return { count, other_counts, doubleCount, increment }
})

在app.vue中进行监听,内容如下:

import {watch} from "vue";
import {useCounterStore} from "@/stores/counter.js";

const counter_store = useCounterStore()
// 单独监听store中的某一个属性
watch(()=>counter_store.count, (new_data, old_data)=>{
  console.log("watch", old_data, new_data)
})

// // 监听 store 的状态变化, 即监听store中的所有属性的变化
counter_store.$subscribe((mutation, state) => {
  console.log("state.count", state.count)
  console.log("state.other_counts", state.other_counts)
});

页面打印结果如下:

watch 0 1
state.count 1
state.other_counts 0
watch 1 2
state.count 2
state.other_counts 0
watch 2 3
state.count 3
state.other_counts 0
state.count 3                   // 这次输出的3 是因为other_counts的状态发生了变化才输出state.count
state.other_counts 1   
watch 3 4
state.count 4
state.other_counts 1

打印结果分析:

watch监听到store中某一个属性变化后会立即响应,$subscribe方式会监听整个store中的所有属性是否变化,任何一个变化,都会调用$subscribe里的回调函数

$subscribe 也可以这样写:

import {watch} from "vue";
import {useCounterStore} from "@/stores/counter.js";

const counter_store = useCounterStore()

// watch(()=>counter_store.count, (new_data, old_data)=>{
//   console.log("watch", old_data, new_data)
// })

// const websocketMsessage = computed(() => websocketMsessageStore.websocketMsessage);
// // 监听 store 的状态变化
counter_store.$subscribe((mutation, {other_counts}) => {
  // console.log("state.count", state.count)
  console.log("state.other_counts",other_counts)
});

打印结果如下:

在这里插入图片描述
再次说明了$subscribe只要监听到store中任何字段的变化都会执行其回调函数

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【算法学习之路】5.贪心算法

贪心算法 前言一.什么是贪心算法二.例题1.合并果子2.跳跳!3. 老鼠和奶酪 前言 我会将一些常用的算法以及对应的题单给写完,形成一套完整的算法体系,以及大量的各个难度的题目,目前算法也写了几篇,题单正在更新&#xf…

【ThreeJS Basics 1-6】Camera

文章目录 Camera 相机PerspectiveCamera 透视相机正交相机用鼠标控制相机大幅度转动(可以看到后面) 控制组件FlyControls 飞行组件控制FirstPersonControls 第一人称控制PointerLockControls 指针锁定控制OrbitControls 轨道控制TrackballControls 轨迹球…

Java+SpringBoot+Vue+数据可视化的百草园化妆服务平台(程序+论文+讲解+安装+调试+售后)

感兴趣的可以先收藏起来,还有大家在毕设选题,项目以及论文编写等相关问题都可以给我留言咨询,我会一一回复,希望帮助更多的人。 系统背景 市场需求催生 在当今社会,化妆已经成为人们日常生活和各种重要场合中不可或…

React:Redux

Redux引入 Redux感觉像组件通信的中介 state存放被管理的状态 action是申请改哪些数据,传入什么参数 reducer是怎么修改数据 我的理解更像是action像一个储存方法的对象,reducer是具体的方法的实现,不同的方法实现也不一样 store是个仓库…

【AI实践】基于TensorFlow/Keras的CNN(卷积神经网络)简单实现:手写数字识别的工程实践

深度神经网络系列文章 【AI深度学习网络】卷积神经网络(CNN)入门指南:从生物启发的原理到现代架构演进【AI实践】基于TensorFlow/Keras的CNN(卷积神经网络)简单实现:手写数字识别的工程实践 引言 在深度…

学习threejs,使用LineBasicMaterial基础线材质

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:threejs gis工程师 文章目录 一、🍀前言1.1 ☘️THREE.LineBasicMaterial1.…

【0010】Python流程控制结构-分支结构详解

如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 分支结构是编程中的基本控制结构之一,它允许程序根据条件判断执行不同的代码路径。通过本文&…

python网络爬虫开发实战之基本库使用

目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…

pytest框架 核心知识的系统复习

1. pytest 介绍 是什么:Python 最流行的单元测试框架之一,支持复杂的功能测试和插件扩展。 优点: 语法简洁(用 assert 替代 self.assertEqual)。 自动发现测试用例。 丰富的插件生态(如失败重试、并发执…

Java 大视界 -- Java 大数据在智慧交通信号灯智能控制中的应用(116)

💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…

Electron桌面应用开发:自定义菜单

完成初始应用的创建Electron桌面应用开发:创建应用,随后我们就可以自定义软件的菜单了。菜单可以帮助用户快速找到和执行命令,而不需要记住复杂的快捷键,通过将相关功能组织在一起,用户可以更容易地发现和使用应用程序…

探索低空,旅游景区无人机应用技术详解

在低空领域,无人机技术在旅游景区中的应用已经日益广泛,为旅游业带来了前所未有的变革。以下是对旅游景区无人机应用技术的详细解析: 一、无人机景区巡检系统 1. 高清拍摄与实时监控:无人机搭载高清摄像头,能够对景区…

Python-07PDF转Word

2025-03-04-PDF转Word DeepSeek等大模型从来都不是简单的写一个静态博客这么肤浅(太多博主都只讲这个内容了)借助全网大神的奇思妙想,拓展我狭隘的思维边界。 文章目录 2025-03-04-PDF转Word [toc]1-参考网址2-学习要点3-核心逻辑4-核心代码 …

【c语言函数精选题】

c语言函数精选题 一、易错概念题1.1💡建立函数的目的1.2💡函数的定义1.3💡return语句1.4💡函数的参数1.5💡复合语句声明变量 二、代码填空题2.1💡四舍五入2.2💡二分法求方程根2.3💡输…

储油自动化革命,网关PROFINET与MODBUS网桥的无缝融合,锦上添花

储油行业作为能源供应链的关键环节,其自动化和监控系统的可靠性和效率至关重要。随着工业4.0的推进,储油设施越来越多地采用先进的自动化技术以提高安全性、降低成本并优化运营。本案例探讨了如何通过使用稳联技术PROFINET转MODBUS模块网关网桥&#xff…

不同类型光谱相机的技术差异比较

一、波段数量与连续性 ‌多光谱相机‌ 波段数:通常4-9个离散波段,光谱范围集中于400-1000nm‌。 数据特征:光谱呈阶梯状,无法连续覆盖,适用于中等精度需求场景(如植被分类)‌。 ‌高光谱相机…

Linux纯命令行界面下SVN的简单使用教程

诸神缄默不语-个人技术博文与视频目录 我用的VSCode插件是这个: 可以在文件中用色块显示代码修改了什么地方,点击色块还可以显示修改内容。 文章目录 1. SVN安装2. checkout3. update1. 将文件加入版本控制 4. commit5. 查看SVN信息:info6.…

STM32单片机芯片与内部114 DSP-变换运算 实数 复数 FFT IFFT 不限制点数

目录 一、ST 官方汇编 FFT 库(64点, 256 点和 1024 点) 1、cr4_fft_xxx_stm32 2、计算幅频响应 3、计算相频响应 二、复数浮点 FFT、IFFT(支持单精度和双精度) 1、基础支持 2、单精度函数 arm_cfft_f32 3、双精…

在IDEA中进行git回滚操作:Reset current branch to here‌或Reset HEAD

问题描述 1)在本地修改好的代码,commit到本地仓库,突然发觉有问题不想push推到远程仓库了,但它一直在push的列表中存在,那该怎么去掉push列表中的内容呢? 2)合并别的分支到当前分支&#xff0…

【五.LangChain技术与应用】【14.LangChain与MoonShot、通义千问:多模型融合的实战】

兄弟们,今天咱们来唠点硬核的——当国产大模型双雄(MoonShot和通义千问)碰上LangChain这个万能胶水,会擦出什么火花?这可不是简单的API调用教程,而是实打实的多模型组合拳打法,保准看完你也能搞出个企业级AI系统!(全程大白话,放心食用) 一、为什么非得搞多模型? 先…