vue3之pinia简单使用

news2024/11/22 11:59:15

一、 Pinia介绍

pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态。就是和vuex一样的实现数据共享。
依据Pinia官方文档,Pinia是2019年由vue.js官方成员重新设计的新一代状态管理器,更替Vuex4成为Vuex5。
Pinia 目前也已经是 vue 官方正式的状态库。适用于 vue2 和 vue3。可以简单的理解成 Pinia 就是 Vuex5。也就是说, Vue3 项目,建议使用Pinia。

pinia官方文档

pinia的优点

  • pinia 符合直觉,易于学习。
  • pinia 是轻量级状态管理工具,大小只有1KB.
  • pinia 模块化设计,方便拆分。
  • pinia 没有 mutations,直接在 actions 中操作 state,通过 this.xxx 访问响应的状态,尽管可 以直接操作 state,但是还是推荐在 actions 中操作,保证状态不被意外的改变。
    store 的 action 被调度为常规的函数调用,而不是使用 dispatch 方法或者是 MapAction 辅助函数,这是在 Vuex 中很常见的。
  • 支持多个 store。
  • 支持 Vue devtools、SSR、webpack 代码拆分。

二、pinia基本使用

  1. 首先先安装依赖
    npm install pinia
    
  2. 在main.js中引入pinia并创建容器挂载到根实例上
    //引入stores暴露出的pinia的实例
    import { createPinia } from 'pinia'
    createApp(App).use(createPinia()).use(router).mount('#app')
    
  3. 创建文件夹目录 (index.ts可以抛出总的文件)
    在这里插入图片描述
  4. @/stores/a.ts 下存储有关数据
    import { defineStore } from 'pinia'
    
    interface FeatureManageType {
      isIframeParent: boolean
    }
    export const useFeatureStore = defineStore('featureInfo', {
      state: () => ({
        featureInfo: {} as FeatureManageType,
      }),
      actions: {
        getFeatureInfo(params: FeatureManageType) {
          console.log('--pinia---params--', params)
          this.featureInfo = params
        },
      },
    })
    
    这段代码定义了一个 featureInfo 的 store,包含一个状态和一个 action,用于管理和操作 featureInfo 的状态。
  5. 【以通过iframe获取父窗口中的数据为例】给数据赋值 - 存数据
    import { useFeatureStore } from '@/stores'
    
    // 初始化定义值
    const iframeParentInfo = ref({ isIframeParent: true })
    // 获取和操作 featureStore 中的状态
    const featureStore = useFeatureStore()
    
    
    const messageHandler = (e) => {
      // 通过origin对消息进行过滤,避免遭到XSS攻击
      if (e.origin !== 'http://127.0.0.1:8080') {
        parseData({})
        return
      }
    
      if (typeof e.data === 'string') {
        parseData(e.data)
      }
    }
    
    const parseData = (data) => {
      try {
        iframeParentInfo.value = JSON.parse(data)
        console.log('父页面传输过来参数', data)
      } catch (error) {
        // console.log('解析JSON出错', error)
        iframeParentInfo.value = { isIframeParent: false }
      }
      // 存储数据
      featureStore.getFeatureInfo(iframeParentInfo.value)
    }
    
    onMounted(() => {
      // 获取 父向 子(iframe) 传递的信息
      window.addEventListener('message', messageHandler)
    
      // 子(iframe)向父传递信息
      window.parent.postMessage('Hello Parent!', '*')
    })
    
  6. 取全局定义的数据值
    import { useFeatureStore } from '@/stores'
    
    const { featureInfo } = toRefs(useFeatureStore().$state)
    
    console.log('获取到存储featureInfo的值', featureInfo)
    

三、 关于pinia中的响应式

可以参考链接 Vue 3 & Pinia 状态管理(3) - Pinia State 的相关使用

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

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

相关文章

PackML 学习笔记(2) OPCUA /PackML

2020年11月11日,OPC 基金会发布了PackML 的配套规范(OPC 30050: PackML - Packaging Control)。意味着可以使用OPCUA 信息模型来构建PackML 模型了。 如果写一篇技术简介往往是简单的,要去实现这门技术却很难。首先,OP…

浅谈Dead reckoning实现原理以及常用算法

0. 简介 航位推算是一个很常见的定位方法。在知道当前时刻的位置,然后通过imu等传感器去估计下一个时刻的位置。在自动驾驶车辆定位的时候,GPS提供10Hz的定位信息。这每个GPS信息来临的0.1s的间隔里面,车辆位置也会移动很多。那么这个时候就…

Android.bp语法和使用方法讲解

Android.bp语法和使用方法讲解 Android.bp 文件是什么? Android.bp 文件首先是 Android 系统的一种编译配置文件,是用来代替原来的 Android.mk文件的。在 Android7.0 以前,Android 都是使用 make 来组织各模块的编译,对应的编译…

抖店评价有礼怎么设置|成都瀚网科技

随着电商行业的不断发展和竞争的加剧,如何吸引消费者、提高店铺的口碑成为了每个卖家关注的焦点。其中,抖音电商平台的礼貌评价功能受到广大卖家的青睐。那么,如何设置抖店评论才能有礼貌呢?我们一起来讨论一下吧。 如何设置抖店评…

go-zerogo web集成gorm实战

前言 上一篇:go-zero&go web集成redis实战 从零开始基于go-zero搭建go web项目实战-04集成gorm实战 源码仓库地址 源码 https://gitee.com/li_zheng/treasure-box golang gorm 官网地址:https://gorm.io/zh_CN/docs/index.html GORM介绍 Gorm是…

Postman —— HTTP请求基础组成部分

一般来说,所有的HTTP Request都有最基础的4个部分组成:URL、 Method、 Headers和body。 (1)Method 要选择Request的Method是很简单的,Postman支持所有的请求方式。 (2)URL 要组装一条Request…

Pytorch Advanced(二) Variational Auto-Encoder

自编码说白了就是一个特征提取器,也可以看作是一个降维器。下面找了一张很丑的图来说明自编码的过程。 自编码分为压缩和解码两个过程。从图中可以看出来,压缩过程就是将一组数据特征进行提取, 得到更深层次的特征。解码的过程就是利用之前的…

python-爬虫-urllib

网络爬虫(Web Crawler),又叫网络蜘蛛、网络机器人,是一种自动化数据采集程序 数据采集 → 数据处理 → 数据存储 常见的工作流程如下: 1.定义采集的目标(网站、APP、公众号、小程序)&#xff…

RP9学习-2

1.基本元素2 1.1树 可以收起 添加子菜单 选中树的节点即可添加 移动层级 编辑树属性 选中某行文字,点击Edit Tree Properties 可以把箭头变成加减,另外也可以导入自己的图标 注意要使用自己的图标,需要勾选Show Icon 也可以给某个节点单…

开放式耳机也会有巅峰音质体验-南卡NANK OE PRO

前言 这两年,开放式耳机市场发展迅猛,新品层出不穷,各大耳机厂商也都相继推出了自家的产品。而在众多的厂家中,作为国内开发式耳机的TOP1,南卡通过多年来在业内领域的经验和专业的技术能力,为广大音乐爱好…

fastadmin在前端调用 /api/common/upload 返回未上传文件或超出服务器上传限制

第一步:在api目录直接调用 域名/api/common/upload 上传图片的时候要在Common.php文件里面把验证登录的 protected $noNeedLogin [init]; 方法注释掉。 // protected $noNeedLogin [init];protected $noNeedLogin *;protected $noNeedRight *; 第二步&#…

计算机竞赛 大数据分析:基于时间序列的股票预测于分析

1 简介 Hi,大家好,这里是丹成学长,今天向大家介绍一个大数据项目 大数据分析:基于时间序列的股票预测于分析 2 时间序列的由来 提到时间序列分析技术,就不得不说到其中的AR/MA/ARMA/ARIMA分析模型。这四种分析方法…

dp(1) - 数字三角形模型

898.数字三角形 题目链接 : 活动 - AcWing 题目 : 给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和…

利用LinuxPTP进行时间同步(软/硬件时间戳) - 研一

转自:https://blog.csdn.net/BUPTOctopus/article/details/86246335 官方文档:https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/6/html/deployment_guide/s1-using_ptp 查看网卡是否支持软硬件时间戳: sudo ethtoo…

为什么做期权卖方是比较高胜率的?

期权三大因素:行情方向、时间价值流失、波动率。波动率下降、时间价值流失,震荡行情,这几项对期权卖方交易有利,一般做期权卖方胜率基本可以达70%左右,下文揭秘为什么做期权卖方是比较高胜率的? 一、期权卖方交易如何…

MQTT网关对接水务二次供水管理平台案例

一、客户介绍 随着城市发展和人口增长,对水务行业的监测和管理要求也越来越高。然而,传统的水务行业监测方式存在很多不足,如数据传输的缓慢和不可靠,数据安全风险大等,为了更有效地监测和管理这些信息,供…

电子科大软件系统架构设计——系统规划

文章目录 系统规划定义意义目标任务路径规划规划步骤规划方法业务系统规划法业务流程重组法价值链分析法战略目标集转移法关键成功因素法 项目计划定义要素工作分解活动排序工期预算三点估计法德尔菲法 成本估算与计算进度安排甘特图法PERT图方法 可行性分析技术可行性分析进度…

固定资产电脑怎么编号管理

科技的发展已经深入到了我们的生活中的每一个角落,尤其是在办公室环境中,电脑已经成为了必不可少的工具。然而,随着电脑数量的增加和管理复杂性的提升,如何有效地管理和追踪这些固定资产变得越来越重要。本文将探讨一种创新的方式…

Scrum敏捷开发如何实施

​在当今高度变化的时代,软件开发的环境和要求也在不断变化。传统的开发方法往往难以适应这种快速变化,因此,一种新的软件开发方法——敏捷开发逐渐得到了广泛的关注和应用。 敏捷开发的实施可以按照以下步骤进行: 1、明确产品愿…

WebDAV之π-Disk派盘 + 飞傲音乐

飞傲音乐是一款专为手机解码耳放设计的本地播放器,旨在提供更符合发烧友使用习惯的音乐播放体验。它具备以下功能和特性: 1. DSD源码输出:支持DSD音频格式的输出,即使是普通手机也能够进行DSD硬解码播放。 2. Hi-Res高清音乐格式源码输出:支持高清音乐格式,可以播放高达…