首页 > 其他分享 >Pinia对store数据进行的订阅监听

Pinia对store数据进行的订阅监听

时间:2023-11-19 11:55:05浏览次数:32  
标签:订阅 const baseUrl subscribe state Pinia 监听 store

基本的使用已经记录完毕了,本篇记录 Pinia对store数据进行的订阅监听,更直白点说,当store中的state变化到我们想要的那个值时,我们需要去做些什么,那么我们就需要用到$subscribe

1. 新建vue3项目,安装Pinia,配置Pinia,不再多说了,不会的可以看官网也可以看我前面的几篇记录文章

2. app.js---首先声明了一个state:baseUrl,写了一个action方法,用于改变baseUrl

import {defineStore} from "pinia"

const appStore = defineStore('appStore', {
    state: () => ({
        baseUrl: 'https://www.baidu.com/'
    }),
    actions: {
        changeState(params) {
            // console.log('接收到的参数===>', params)
            this.baseUrl = params
        }
    }
})

export default appStore

3. 页面调用 注释写的有点多,真实的内容并没有多少

<template>
  <div>
    {{ baseUrl }}
  </div>
  <div v-show="isShow">
    该我出现了
  </div>
  <button @click="changeData">
    通过actions改变数据
  </button>
</template>

<script>
import appStore from "@/store/app"
import {storeToRefs} from "pinia"
import {ref} from "vue"

export default {
  name: "PiniaSubscribe",
  setup() {
    const store = appStore()
    const {baseUrl} = storeToRefs(store)
    const afterChangeUrl = 'https://www.taobao.com/'
    let isShow = ref(false)

    const subscribe = store.$subscribe((mutation, state) => {
      /*
      * mutation主要包含三个属性值:
      *   events:当前state改变的具体数据,包括改变前的值和改变后的值等等数据
      *   storeId:是当前store的id
      *   type:用于记录这次数据变化是通过什么途径,主要有三个分别是
      *         “direct” :通过 action 变化的
                ”patch object“ :通过 $patch 传递对象的方式改变的
                “patch function” :通过 $patch 传递函数的方式改变的
      *
      * */
      // 我们就可以在此处监听store中值的变化,当变化为某个值的时候,去做一些业务操作之类的
      console.log(mutation)
      console.log(state.baseUrl)
      if (state.baseUrl === afterChangeUrl) isShow.value = true
      else isShow.value = false
    }, {detached: false})  //第二个参数options对象,是各种配置参数
    //detached:布尔值,默认是 false,正常情况下,当订阅所在的组件被卸载时,订阅将被停止删除,
    // 如果设置detached值为 true 时,即使所在组件被卸载,订阅依然在生效
    //参数还有immediate,deep,flush等等参数 和vue3 watch的参数是一样的,多的就不介绍了,用到再看文档吧

    // 停止订阅
    // subscribe()  //调用上方声明的变量值,示例(subscribe),即可以停止订阅

    function changeData() {
      store.changeState(afterChangeUrl)
    }

    return {
      isShow,
      baseUrl,
      changeData
    }
  }
}
</script>

标签:订阅,const,baseUrl,subscribe,state,Pinia,监听,store
From: https://www.cnblogs.com/xmyfsj/p/17841797.html

相关文章

  • python实现socket端口监听
    #服务端importsocketip_port=('127.0.0.1',1234)sk=socket.socket(socket.AF_INET,socket.SOCK_DGRAM,0)sk.bind(ip_port)whileTrue:data=sk.recv(1024).strip().decode()print(data)ifdata=="exit":print(&qu......
  • Pinia
    Pinia优势Pinia.js是新一代的状态管理器,由Vue.js团队中成员所开发的,因此也被认为是下一代的Vuex,即Vuex5.x,在Vue3.0的项目中使用也是备受推崇。Pinia.js有如下特点:完整的typescript的支持;足够轻量,压缩后的体积只有1.6kb;去除mutations,只有state,getters,actions(这......
  • vue3 使用 store
    在script中使用storehttps://blog.csdn.net/SubStar/article/details/116077737<script>import{getCurrentInstance}from"vue";import{useStore}from"vuex";exportdefault{setup(){//第一种方法:获取路由对象router的方法1constv......
  • vue pinia sessionstorage 数据存储不上的原因
    vuepiniasessionstorage的坑默认的配置是开始localStorage如果用sessionstorage则发现数据存储不上,是因为缺少了序列化和反序列化import{parse,stringify}from'zipson'exportconstuseCounterStore=defineStore('counter',()=>{constcount=ref(0)......
  • Vue3 Pinia对state的订阅监听($subscribe,$onAction)数据监听
    <template><divclass="main-container":class="{'show-scroll':targetIsVisible}"><div:style="{height:frameHeight+'px'}"class="main-content":class="{'show-......
  • OpenWRT/iStoreOS 不重头编译内核安装4G LTE网卡 Quectel EM05-CE记录
    我的机器是x86装了iStoreOS,有4G网卡QuectelEM05https://www.quectel.com/cn/product/lte-em05主要参考资料如下https://www.youtube.com/watch?v=DRddwfZ_TBYhttps://openwrt.org/docs/guide-user/network/wan/wwan/ltedonglehttps://zsien.cn/openwrt-ltedongle/按照视......
  • Vue中Pinia简介
    Pinia是一个进行vue状态管理的组件,他会创建一个带有state、actions、getters的option对象constuseCounterStore=defineStore('counter',{state:()=>({count:0}),getters:{double:(state)=>state.count*2},actions:{increment(){......
  • 过期监听实现定时任务的反面教材
    一、场景    在电商、支付等领域,往往会有这样的场景,用户下单后放弃支付了,那这笔订单会在指定的时间段后进行关闭操作。    像某宝、某东都有这样的逻辑,而且时间很准确,误差在1s内,那他们是怎么实现的呢?    一般实现方法有几种: 使用RocketMQ、RabbitM......
  • vuejs3.0 从入门到精通——Pinia——定义Store
    定义Store Store是用defineStore()定义的,它的第一个参数要求是一个独一无二的名字:import{defineStore}from'pinia'//你可以对`defineStore()`的返回值进行任意命名,但最好使用store的名字,同时以`use`开头且以`Store`结尾。(比如`useUserStore`,`useCartStore......
  • vuejs3.0 从入门到精通——Pinia——Store 是什么?
    Pinia——Store是什么?https://pinia.vuejs.org/zh/getting-started.html#what-is-a-store一、Store是什么? Store(如Pinia)是一个保存状态和业务逻辑的实体,它并不与你的组件树绑定。换句话说,它承载着全局状态。它有点像一个永远存在的组件,每个组件都可以读取和写入它。......