vue3之pinia简单使用

一、 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.hqwc.cn/news/106962.html

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

相关文章

9.4 数据库 TCP

#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);//判断数据库对象是否包含了自己使用的数据库if(!db.contains("Stu.db")){//不存在数据库&#xff0…

IOMesh 为 KubeVirt 提供高效稳定的持久化存储支持(附用户实践)

7 月 11 日,KubeVirt 社区正式宣布发布 Kubernetes 原生虚拟机管理插件 KubeVirt v1.0。这一版本发布不仅标志着 KubeVirt 已进化为生产就绪的虚拟机管理解决方案,也为正在使用虚拟化环境的用户提供了更多元的云化转型路线:搭配 Kubernetes 持…

UMA 2 - Unity Multipurpose Avatar☀️三.给UMA设置默认服饰Recipes

文章目录 🟥 项目基础配置🟧 给UMA配置默认服饰Recipes🟨 设置服饰Recipes属性🟥 项目基础配置 将 UMA_DCS 预制体放到场景中创建空物体,添加DynamicCharacterAvatar 脚本,选择 HumanMaleDCS作为我们的基本模型配置默认Animator 🟧 给UMA配置默认服饰Recipes 服饰Re…

JavaWeb开发中的问题

一,页面没有显示css样式效果 在修改jsp文件时,浏览器呈现效果能发生改变,但修改css样式文件却没有效果,得清除浏览数据,重新运行,css样式才能有效果。以上所得:css文件应该会保存在浏览记录中。…

java导出Mysql表信息生成Word文档

一、背景描述 系统上线或者交付,或者需要提供整理数据库表信息,如果一个个整理未免麻烦,接下来一个demo示例如何用JAVA导出Mysql数据库表信息生成Word文档。 传入null导出全部表 传指定表只导出指定表

使用Process Explorer查看线程的函数调用堆栈去排查程序高CPU占用问题

目录 1、问题描述 2、使用Process Explorer排查软件高CPU占用的一般思路 3、使用Process Explorer工具进行分析 3.1、找到CPU占用高的线程 3.2、查看CPU占用高的线程的函数调用堆栈,找到出问题的代码 3.3、libwebsockets库导出接口lws_service的说明 3.4、解…

通达信指标编写,16进制颜色对照表,妈妈再也不用担心颜色不够用了!!

★★★★★博文创作不易,我的博文不需要打赏,也不需要知识付费,可以白嫖学习小技巧,喜欢的老铁可以多多点赞收藏分享置顶,小红牛在此表示感谢。★★★★★ #龙虎榜小红牛系统,官方微信公众号:g…

使用QT操作Excel 表格的常用方法

VBA 简介 Microsoft Office软件通常使用VBA来扩展Windows的应用程序功能,Visual Basic for Applications(VBA)是一种Visual Basic的一种宏语言。 在VBA的参考手册中就可以看到具体函数、属性的用法,Qt操作Excel主要通过 QAxObj…

uni-app:重置表单数据

效果 代码 <template><form><input type"text" v-model"inputValue" placeholder"请输入信息"/><input type"text" v-model"inputValue1" placeholder"请输入信息"/><input type&quo…

将 ordinals 与 比特币智能合约集成 : 第 1 部分

将序数与比特币智能合约集成&#xff1a;第 1 部分 最近&#xff0c;比特币序数在区块链领域引起了广泛关注。 据称&#xff0c;与以太坊 ERC-721 等其他代币标准相比&#xff0c;Ordinals 的一个主要缺点是缺乏对智能合约的支持。 我们展示了如何向 Ordinals 添加智能合约功…

python趣味编程-恐龙克隆游戏

Python 中使用 Turtle 的恐龙克隆游戏免费源代码 使用 Turtle 的恐龙克隆游戏是一个用Python编程语言编码的桌面游戏应用程序。该项目包含在 Chrome 浏览器中克隆实际恐龙游戏的多种功能。该项目可以使正在修读 IT 相关课程的学生受益。这个应用程序非常有趣,可以帮助您学习创…

scoped样式修饰符的使用

在Vue.js中&#xff0c;scoped 是一个用于样式的修饰符&#xff0c;它用于限定样式的作用范围&#xff0c;使得样式只在当前组件的作用域内生效&#xff0c;而不会影响到父组件或子组件的样式。这个特性通常用于解决 CSS 样式污染的问题&#xff0c;确保样式只会影响到当前组件…