Pinia快速入门

news2025/4/5 16:30:28

Pinia学习

  • 1.做什么用的❓
  • 2.优势❓
  • 3. 介绍❓
    • 3.1、与vuex对比
      • 与 Vuex 3.x/4.x 的比较#
  • 4.实操使用💪
    • 版本须知
    • 4.1创建项目
    • 4.2运行项目
    • 4.3使用pinia
      • 安装
      • 全局引入挂载
      • 使用
        • state
        • getters
        • actions
        • 示例
        • 代码分析

1.做什么用的❓

  • 与vuex的作用一致,用于做网页存储的
  • Pinia 是 Vue 的存储库,它允许您跨组件/页面共享状态

2.优势❓

  • 与vue3、typescript兼容较为友好
  • 上手容易,对开发者友好
  • 状态变更的流程更为简易
  • action可支持同步或者异步
  • 等等…

3. 介绍❓

官网:https://pinia.web3doc.top/
它可以用来代替vuex

3.1、与vuex对比

Pinia 最初是为了探索 Vuex 的下一次迭代会是什么样子,结合了 Vuex 5 核心团队讨论中的许多想法。最终,我们意识到 Pinia 已经实现了我们在 Vuex 5 中想要的大部分内容,并决定实现它 取而代之的是新的建议。

与 Vuex 3.x/4.x 的比较#

Vuex 3.x 是 Vuex 的 Vue 2 而 Vuex 4.x 是 Vue 3
Pinia APIVuex ≤4 有很大不同,即:

  • mutations 不再存在。他们经常被认为是 非常 冗长。他们最初带来了 devtools 集成,但这不再是问题。
  • 无需创建自定义复杂包装器来支持 TypeScript,所有内容都是类型化的,并且 API 的设计方式尽可能利用 TS 类型推断。
  • 不再需要注入、导入函数、调用函数、享受自动完成功能!
  • 无需动态添加Store,默认情况下它们都是动态的,您甚至都不会注意到。请注意,您仍然可以随时手动使用 Store
    进行注册,但因为它是自动的,您无需担心。 不再有 modules 的嵌套结构。您仍然可以通过在另一个 Store 中导入和 使用 来隐式嵌套Store,但 Pinia 通过设计提供平面结构,同时仍然支持 Store 之间的交叉组合方式。 您甚至可以拥有 Store 的循环依赖关系。
  • 没有 命名空间模块。鉴于 Store 的扁平架构,“命名空间” Store 是其定义方式所固有的,您可以说所有 Store都是命名空间的。

4.实操使用💪

版本须知

我下边操作基于pinia2.0.30版本
在这里插入图片描述

4.1创建项目

我这里使用vue-cli进行创建使用
Tip:记得安装个vue-cli脚手架,也可以用vite去创建,创建vue项目我就不多说了

vue create 项目名称
cd 项目名称
npm i

根据以上步骤即可创建成功

4.2运行项目

npm run serve

这样即可运行成功,开始使用pinia

4.3使用pinia

安装

npm install pinia

全局引入挂载

在main.js下

import { createPinia } from 'pinia'
import { createApp } from 'vue'
import App from './App.vue'
createApp(App).use(createPinia()).mount('#app')

使用

src文件夹下创建文件夹store—>index.js
用于编写pinia的状态共享内容

import { defineStore } from "pinia";

export default defineStore('main',{
    state:()=>{
        return {
            count:10,
            price:99
        }
    },
    //计算属性
    getters:{
        Sumprice:(state)=>{
            console.log('1111',state)
            return state.count*state.price;
        }
    },
    //vuex:只能是异步,pinia表示可同步也可异步
    actions:{
        async getTest(){
            let msg="消息"
            setTimeout(() => {
                msg="最终消息"
                console.log(msg);
                this.count=9999;//通过this.属性名直接赋值...
            }, 1000);
            return msg;
        },
    }
})

下方示例均基于上方pinia的内容进行使用
在使用该模块的公共属性的页面需要先引入上方文件👇

import useMainStore from './store/index.js'
const store=useMainStore();

state

  • 用于创建公共属性,和vuex一致

getters

  • 计算属性,用于监听state的改变

actions

  • 编写同步异步的方法实现动态数据赋值
  • vuex:只能是异步,pinia表示可同步也可异步

示例

<template>
  <div>
    <h1>碰磕Age:{{ store.count }}</h1>
    <h2>{{ count }}</h2>
    <h2>:{{ store.Sumprice }}</h2>
    <button @click="addCount">+</button>
    <button @click="patchCount">+</button>
    <button @click="pathcFnCount">+</button>
    <button @click="replaceCount">替换state</button>
    <button @click="resetCount">重置</button>

    <button @click="store.getTest()">获取数据</button>
  </div>
</template>

<script setup>
import { storeToRefs } from 'pinia';
import useMainStore from './store/index.js'
const store=useMainStore();
//方式二解构并且响应式
let {count}=storeToRefs(store);
/**
 * state修改
 */
const addCount=()=>{
  store.count++;
}

/**
 * $patch修改
 * 方便批量修改
 */
const patchCount=()=>{
  store.$patch({
    count:store.count+2
  })
}

/**
 * $patch指定修改哪个属性
 */
const pathcFnCount=()=>{
  store.$patch((state)=>{
    state.count++;
  })
}

/**
 * 将整个state直接替换
 */
const replaceCount=()=>{
  store.$state={
    count:10,
    price:99
  }
}
/**
 * 将整个state重置
 */
 const resetCount=()=>{
  store.$reset();
}

/**
 * 监听整个仓库变化
 */
store.$subscribe((mutation,state)=>{
  console.log("mutation=",mutation,"state=",state)
})
</script>

代码分析

  • 页面中可通过store.属性名直接使用
  • 也可以通过在js中定义属性解构返给页面使用,但想实现响应式必须依赖于storeToRefs
  • 可通过$patch批量修改state的属性,也可以指定修改哪个属性
  • 可通过store.$state将整个state进行替换
  • 通过store.$reset()可实现重置
  • 通过store.$subscribe(()=>{})可实现监听改变

到这里基本就完结了~

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

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

相关文章

【STC15单片机】模拟I2C操作AT24C02数据读取【更新中】

目录 I2C时序结构 I2C代码 AT24C02代码&#xff08;继承I2C底层代码&#xff09; PCF8591 PCB上线的长短可能影响数据传输的时间&#xff0c;写I2C时序可能就要加一点延时 I2C时序结构 起始条件&#xff1a;SCL高电平期间&#xff0c;SDA从高电平切换到低电平终止条件&…

什么蓝牙耳机好用性价比高?性价比最高的蓝牙耳机品牌排行

无线耳机迅速成为了电子产品中的佼佼者&#xff0c;无论是日常通勤、办公或是休闲、娱乐&#xff0c;几乎都能看到戴耳机听音乐的人&#xff0c;细心的朋友应该能够发现&#xff0c;蓝牙耳机在这几年有了很大的进步&#xff0c;下面我就分享几款当前性价比最高的蓝牙耳机。 TO…

T38,数的递归

描述 输入一棵节点数为 n 二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;具有以下性质&#xff1a;它是一棵空…

分账系统逻辑

一、说明 主体与业务关系方进行相关利益和支出的分配过程 使用场景&#xff1a; 在分销业务中&#xff0c;主营商户收到用户购买分销商品所支付的款项后&#xff0c;可以通过分账逻辑&#xff0c;与分销商进行佣金结算。在零售、餐饮等行业中&#xff0c;当销售人员完零售等…

小樽 C++指针—— (壹) 指针变量

(壹) 指针变量 一、指针的概念与定义 二、给指针变量p赋值 三、指针变量的的、-运算 四、无类型指针 五、多重指针 C (壹) 指针变量 小明想把从李华家借来的书——《CCF中学生计算机程序设计》还给李华&#xff0c;但李华不在家&#xff0c;于是把书放到书架第3层的最右边…

入门介绍对ChatGPT的应用程序接口API的访问<openai模块>

首先本人建议使用国内环境安装openai模块(这是我切换环境使用国外IP之后安装有问题的建议)pip install openai -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com安装好了之后&#xff0c;我们切换成科学上网&#xff0c;然后我们来到https://platform.openai…

十大开源测试工具和框架,一定有你需要的

目录 前言 Katalon Studio Selenium Appium JMeter SOAP UI Robot Framework Watir JUnit Robotium Citrus 总结 前言 免费的开源框架和工具由于其开源特性&#xff0c;现在逐渐成为自动化测试的首选解决方案。区别在于&#xff0c;你是喜欢使用类库编写一个全新的…

Ubuntu20.04安装redis与远程连接

一、安装Redis5.7 1、安装Redis apt-get install redis-server2、安装完成后&#xff0c;Redis服务器会自动启动。查看redis是否启动成功 service redis-server status #查看状态如下显示Active:active(running)状态&#xff1a;表示redis已在运行&#xff0c;启动成功。 …

Linux常用命令1

目录1、远程登陆服务器2、文件相关&#xff08;1&#xff09;文件和目录属性&#xff08;2&#xff09;创建目录mkdir&#xff08;3&#xff09;删除目录rmdir&#xff08;4&#xff09;创建文件touch&#xff08;5&#xff09;删除文件或目录rm&#xff08;6&#xff09;ls命令…

使用Python调用ChatGPT

import openai# Set up the OpenAI API clientopenai.api_key "你的KEY"# Set up the model and promptmodel_engine "ada"prompt input(请输入字符串&#xff1a;)# Generate a responsecompletion openai.Completion.create(enginemodel_engine,prom…

情人节使用AI TOOL来创建一个甜言蜜语的女伴

一、首先使用chatgpt生成一段情侣间的对话&#xff0c;需要反复几次&#xff0c;达到满意的程度&#xff0c;然后将女方的话归在一起。 这是一个情侣私下谈话的场景&#xff0c;女方表示对男朋友精心准备的情人节安排和礼物表示很满意 二、 打开网站&#xff1a;https://lexic…

Global mapper下载并使用在线数据---以下载ASTER GDEM为例

Global mapper 有个非常厉害的功能&#xff0c;就是下载在线资源&#xff0c;且不需要插件 当我们需要使用dem的时候&#xff0c;手头没有&#xff0c;需要去官网或者其他地方下载&#xff0c;就很麻烦 下载在线数据步骤—以下载ASTER DEM为例 打开global mapper后&#xff…

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍

Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍 目录 Unity 工具 之 SoftMask软遮罩 实现 UI 边缘渐变过渡的简单使用介绍 一、简单介绍 二、Mask 实现的遮罩效果 三、Soft Mask 实现遮罩效果 四、 Soft Mask 的一些设置 五、插件下载 一、简单介绍 U…

Google Chrome开发者工具

文章目录简介debuggerDOMContentLoaded与load的区别最后我们来回答这个问题&#xff1a;我们为什么一再强调将css放在头部&#xff0c;将js文件放在尾部简介 Chrome 开发者工具是一套内置于 Google Chrome 中的Web开发和调试工具&#xff0c;可用来对网站进行迭代、调试和分析…

[数据结构笔记]常见排序算法

分类与性能 排序方法平均情况最好情况最坏情况辅助空间稳定性冒泡排序O(N^2)O(N)O(N^2)O(1)稳定简单选择排序O(N^2)O(N^2)O(N^2)O(1)不稳定直接插入排序O(N^2)O(N)O(N^2)O(1)稳定希尔排序O(N*logN) ~ O(N^2)O(N^1.3)O(N^2)O(1)不稳定堆排序O(N*logN)O(N*logN)O(N*logN)O(1)不稳…

英文视频字幕生成和翻译工具、AI拟声工具

文章目录一、Autosub-ahk&#xff1a;英文视频字幕生成工具二、VideoSrt&#xff1a;英文视频字幕生成和翻译工具三、SubtitleEdit&#xff1a;字幕编辑工具四、PotPlayer&#xff1a;视频播放器&#xff08;可导入字幕&#xff09;五、MockingBird&#xff1a;AI拟声工具一、A…

软件架构知识3-系统复杂度-高可用性、可扩展性、低成本、安全、规模

高可用性 系统无中断地执行其功能的能力&#xff0c;代表系统的可用性程度&#xff0c;是进行系统设计时的准则之一。 高可用的“冗余”解决方案&#xff0c;单纯从形式上来看&#xff0c;和之前讲的高性能是一样的&#xff0c;都是通过增加更多机 器来达到目的&#xff0c;但…

MyBatis案例 | 使用映射配置文件实现CRUD操作——删除数据

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等&#xff0c;如果刚开始学习Java的小伙伴可以点击下方连接查看专栏 本专栏地址&#xff1a;&#x1f525;JavaWeb Java入门篇&#xff1a; &#x1f525;Java基础学习篇 Java进阶学习篇&…

Linux--网络基础(1)--0211 12

1.网络传输基本流程 1.1 同一个网段内的两台主机进行文件传输 局域网中的两态主机是可以直接通信的。&#xff08;手机和电视链接同一个wifi就可以投屏&#xff09; 从逻辑上讲&#xff0c;应用层的数据可以直接给另一个人的应用层。 从物理上讲&#xff0c;应用的数据需要自…

分库分表索引设计:分布式环境下的 主键索引、二级索引、全局索引的最佳设计实践

文章目录主键选择索引设计全局表唯一索引总结结语主键选择 对主键来说&#xff0c;要保证在所有分片中都唯一&#xff0c;它本质上就是一个全局唯一的索引。如果用大部分同学喜欢的自增作为主键&#xff0c;就会发现存在很大的问题。 因为自增并不能在插入前就获得值&#xf…