pinia学习笔记(1.0)

vue3+Pinia的使用 Pinia官网地址 https://pinia.vuejs.org/ Pinia的优势 Pinia是一个全新的Vue状态管理库,是Vuex的代替者,尤雨溪强势推荐 Vue2 和 Vue3 都能支持 抛弃传统的 Mutation ,只有 state, getter 和 action ,简化状态管理库 不需要嵌套模块,符合 Vue3 的 Composition api,让代码扁平化 TypeScript支持 代码简洁,很好的代码自动分割 Pinia的基本使用 初始化项目 npm init vite@ 阅读详情
AI摘要

本文介绍了在Vue3项目中从0到1搭建Pinia仓库的方法。先安装Pinia,在入口文件创建实例并使用。定义Store可用选项式或组合式写法,还说明了如何在组件中使用仓库。此外,提到可建多个仓库、仓库可嵌套,以及给Pinia添加插件的方法。

  首先贴出官网地址:开始 | Pinia

pinia作为Vue3项目中常用的状态管理工具,正逐渐取代vuex,现从0到1自己搭建pinia仓库。

首先,安装pinia,使用包管理器工具(npm,pnpm,yarn,Bun等都可以)

安装成功后,就会在package.json中找到

然后就是在入口文件中使用(我是用的是vite创建的项目,所以入口文件就是main.ts):

创建pinia实例并使用,相关的创建代码中,移到了Store文件夹中。

具体内容如下:
 

import {createPinia} from 'pinia'

//创建大仓库

let pinia=createPinia()


//导出仓库
export default pinia;

然后需要在入口文件中使用:
 

这样就建立了一个空的仓库 ,然后我们还需要定义一个Store,在Vuex中对应的state,getter,action中,都会在Store中进行定义。

定义Store是用defineStore函数定义的

然后我自己新建一个空文件testStore.ts

内容如下:

import { defineStore } from "pinia";

let useTestStore=defineStore("test",{
    state:()=>{
        return {
            name:"test",
            count:10
        }
    },
   getters: {
    doubleCount: (state) => state.count * 2,
  },
  actions: {
    increment() {
      this.count++
    },
  },
})

export default useTestStore;

这里需要注意几个点:首先,定义Store一般需要以use开头,第一个参数是你的应用中 Store 的唯一 ID。第二个参数就是仓库的配置项,state 是 store 的数据 (data),getters 是 store 的计算属性 (computed),而 actions 则是方法 (methods)。上面的写法是选项式写法,写过vuex的可能会对此写法更加的熟悉,但是pinia还有另一种组合式写法,习惯使用组合式API的可能更喜欢这种写法。

将上面的代码转换成组合式写法(setup)

import { defineStore } from "pinia";
import { ref,computed } from "vue";
let useTestStore=defineStore("test",()=>{
    const count=ref(10)
    const name=ref('test')

    const doubleCount=computed(()=>count.value*2)

    //注意,action中的方法不要写成箭头函数
    function increment() {
        count.value++;
    }

    return {
        count,
        name,
        doubleCount,
        increment
    }
})

export default useTestStore;

在组合式写法中,state中的属性需要使用ref定义,getters中的计算属性就直接使用computed()进行使用即可,而actions则在下面直接进行函数(普通函数)定义即可。

这样我们的仓库就定义好了,我们需要再组件中进行使用。

这里是再项目中使用了路由,所以需要根据指定路径进行跳转,在控制台中,我们可以看到打印的信息,我们就可以直接使用插值语法直接渲染在页面中。

 

然后使用按钮修改count的值,看对应的getter和action中定义的方法。

 

全部代码如下:

<template>
 <div>
  {{ testStore.name }}---{{ testStore.count }}
  <el-button type="primary" size="default" @click="handler">点我修改count</el-button>
  
 </div>
</template>

<script setup lang="ts">
import {ref,reactive} from 'vue'
import useTestStore from '../../store/testStore';


const testStore = useTestStore()

console.log(testStore);

const handler=()=>[
    testStore.increment(),
    
    console.log(testStore.doubleCount)
]
</script>

<style scoped lang="scss">

</style>

 这样我们就使用了仓库中的方法和计算属性,以及仓库中存储的state。当然了,同步和异步的方法都可以直接写在仓库中,因为pinia中没有mutation,所以一个action中可以书写同步和异步的方法,大大简化了状态更新流程。

当然了仓库,可以建立多个,我们可以建立多个ts文件来创建不同功能的Store,用到的时候需要那个仓库就进行引入即可。

还有就是Store可以嵌套,就是在定义一个Store时,可以使用领一个Store中的数据,代码演示如下:

/*
 * @Author: RealRoad
 * @Date: 2024-10-14 15:50:02
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-10-14 16:00:44
 * @Description: 
 * @FilePath: \project_10_08\vite-project\src\store\testStore.ts
 */
import { defineStore } from "pinia";
import { ref,computed } from "vue";
let useTest2Store=defineStore("test2",()=>{
    const count=ref(10)
    const name=ref('test')
    const huawei=ref('遥遥领先')

    const doubleCount=computed(()=>count.value*2)

    //注意,action中的方法不要写成箭头函数
    function increment() {
        count.value++;
    }

    return {
        count,
        name,
        doubleCount,
        increment,
        huawei
    }
})

export default useTest2Store;

注意,这里的仓库名不要和领一个仓库名重名!!!

仓库定义如下:

/*
 * @Author: RealRoad
 * @Date: 2024-10-14 15:50:02
 * @LastEditors: Do not edit
 * @LastEditTime: 2024-10-14 16:00:44
 * @Description: 
 * @FilePath: \project_10_08\vite-project\src\store\testStore.ts
 */
import { defineStore } from "pinia";
import { ref,computed } from "vue";
import useTest2Store from "./testStore2";
let useTestStore=defineStore("test",()=>{
    const count=ref(10)
    const name=ref('test')
    const iphone=useTest2Store()

    const doubleCount=computed(()=>count.value*2)

    //注意,action中的方法不要写成箭头函数
    function increment() {
        count.value++;
    }

    return {
        count,
        name,
        doubleCount,
        increment,
        iphone:iphone.huawei
    }
})

export default useTestStore;

界面直接使用:

 给pinia添加插件

就是在定义大仓库导出大仓库之前进行插件定义,然后使用pinia实例进行使用该插件,就相当于默认给pinia添加了一些属性和方法,这样,无论是哪个Store,都可以直接使用这些插件。

那么pinia实例的定义如下:

import {createPinia} from 'pinia'

//创建大仓库
//创建时给pinia仓库一个默认的属性值
function piniaPlugin(){
    return {default:'Hello MEZ!!'}
}
let pinia=createPinia()
pinia.use(piniaPlugin)

//导出仓库
export default pinia;

然后我们在使用仓库的时候,就可以直接使用。

虽然ts爆红,但是不影响使用

 

【pinia源码】一、createPinia源码解析 【pinia源码】系列文章主要分析pinia的实现原理。本篇文章将分析createPinia的实现。 阅读详情

相关推荐

“从零开始:Pinia快速入门指南“!!

Pinia 是一个专为 Vue 3 设计的状态管理库,它的设计目标是提供一个更简洁、更直观的 API,使得状态管理变得更容易理解和使用。它的前身 是Vuex5,它是Vuex5的下一个迭代实验,它实现了Vuex5中的大部分功能。它最大特点是轻量级: 相比于 Vuex,Pinia 更加轻量,没有不必要的抽象层,这有助于提高性能和减小包大小。

weixin_42190182的博客 988

Pinia的简单使用

1.pinia 和 vuex 具有相同的功效, 是 Vue 的存储库,它允许您跨组件/页面共享状态。2.设计使用的是 Composition api,更符合vue3的设计思维。3.Pinia 对 Vue 2 和 Vue 3 都有效,并且不需要您使用组合 API。

weixin_56371227的博客 2540

Pinia学习笔记之1--概览

Why Pinia Pinia (pronounced /piːnjʌ/, like “peenya” in English) is the closest word to piña (pineapple in Spanish) that is a valid package name. A pineapple is in reality a group of individual flowers that join together to create a multiple fruit. Similar

绝对零度的博客 1492

Vue笔记(八)

1.action不仅能同步修改状态,还可处理异步任务。通过在action中使用 async/await 语法,能让代码以更简洁、直观的方式处理异步操作,避免复杂的回调地狱。2.与同步action的区别:同步action即时执行并修改状态,而异步action在异步操作完成后才更新状态。并且,异步action需处理异步操作可能出现的错误,增强代码的健壮性。3.错误处理:使用 try...catch 块捕获异步操作中的错误,可在捕获错误后,根据不同错误类型进行相应处理// 模拟一个异步请求函数。

2403_88462732的博客 1593

Pinia支持TypeScript

Pinia 作为 Vue 官方推荐的状态管理库,凭借其简洁的 API 和优秀的 TypeScript 支持,已成为 Vue 生态的核心工具之一

m0_72030584的博客 1239

Vue3+Vite4+Pinia+ElementPlus从0-1 web项目搭建

Vue3+Vite4+Pinia+ElementPlus

窗外有风景,笔下有前途,低头是题海,抬头是未来 1544

pinia从0到1

九、pinia中的getters(Pinia中的getter和Vue中的计算属性几乎一样,在获取State值之前可以做一些逻辑处理。2.在主管理器中引入Shop管理器,通过实例后就可以获取到Shop中的数据了。pinia中的数据在组件中可以直接修改值,不需要通过mutations。1.在store中创建一个Shop.js,用于管理店铺数据。在actions中定义的方法在任务组件中都可以调用。list: [‘零食’,‘生鲜’],3.在对应的数据管理器中配置持久化。六、组件中修改pinia数据。

qq_34856863的博客 807

Vue 3.0 pinia状态管理库

Pinia是Vue的专属状态管理库,它允许你跨组件或页面共享状态store采用的是选项式模式时,state选项为函数返回的对象,在其定义共享的数据import {// 共享的数据,为函数返回的对象形式 state :() =>({age : 27 , level : 5 , account : 'SD77842' , nickname : '自古风流' }) })store采用的是组合式模式时,在其函数内定义的ref变量,最终return出去来提供共享的数据import {import {

m0_60970928的博客 1220

pinia详细使用步骤(0基础)

pinia使用步骤整理,从0开始很详细

qq_44423029的博客 1万+

Vue全家桶 - pinia 的理解和学习1(Pinia 核心概念的 Store、State、Getter、Action)

Pinia作为一个基于Vue 3的状态管理库,‌通过其简洁的API设计、‌内置的TypeScript支持、‌模块化的状态管理以及性能优化等特点,‌为Vue项目的开发提供了高效且便捷的状态管理解决方案。‌

鲍胜印的博客 1662

200_matlab处理NCEP数据并画全球彩色的风场图

200_matlab处理NCEP数据并画全球彩色的风场图。

miaobo0的博客 1240

Vue 3.0 状态管理Pinia详解

Pinia是Vue3的轻量级状态管理工具,相比Vuex具有API简洁(去掉Mutations)、TypeScript支持友好、插件机制灵活等优势。它采用单一状态树和模块化设计,核心概念包括State、Getters和Actions,支持响应式更新和异步操作。Pinia提供类似Vue组合式API的写法,推荐使用setup语法进行状态管理,并内置插件系统实现日志记录、状态持久化等功能。最佳实践建议将逻辑拆分为可复用的composition函数,提升代码可维护性。

分享前端工程化、AI 应用、Agent 开发与大模型实践! 2461

Hypermesh二次开发实战:从Tcl/Tk脚本到Ext API的进阶之路

本文系统介绍了Hypermesh二次开发的进阶路径,从自动化重复操作的Tcl/Tk脚本入门,到利用HMASCII接口深度读写模型数据,最终深入Ext API进行高性能计算与功能定制。通过实战案例,帮助工程师掌握从脚本录制到C++插件开发的完整技能,显著提升CAE前处理效率与自动化水平。

weixin_29306875的博客 671

【Vue3】走进Pinia,学习Pinia,使用Pinia

Pinia是一个专为Vue 3设计的集中式状态(数据)管理库,它提供了一种简单而强大的方式来管理应用程序的状态。Pinia的设计理念是尽可能地与Vue的响应式系统集成,以提供最佳的性能和开发体验Pinia是一个强大而灵活的Vue状态管理库,它提供了一种简单而优雅的方式来管理应用程序的状态。通过利用Pinia,我们可以更好地组织和管理我们的Vue应用程序,并确保其具有良好的性能和可维护性。如果您正在寻找一种新的状态管理库,不妨试试Pinia,相信它会给您带来惊喜!

null18的博客 1448

Android14_MTK调试LCD屏功能

android14 MTK平台调试LCD屏

m0_37786046的博客 1473

打通Creo与Matlab的桥梁:Simscape Multibody Link插件安装与配置全攻略

本文详细介绍了Simscape Multibody Link插件的安装与配置全流程,旨在帮助机械工程师和开发者打通Creo与Matlab/Simulink之间的桥梁,实现CAD模型到多体动力学仿真的高效转换。文章重点解析了版本兼容性、管理员权限、注册文件配置等关键步骤与常见故障排查方法,助力用户快速建立设计与仿真一体化工作流。

rrr55的博客 634

Pinia 从 0.0.7 迁移指南:store 属性 `$` 前缀、Pinia 实例与 SSR 架构重构全解析

> 本文基于当前仓库 [migration-0-0-7.md](https://link.gitcode.com/i/066ebef5b02b4b9baafee5b4e221cede) 编写,完整梳理 Pinia 在 `0.0.7` 之后(`0.1.0`、`0.2.0`)引入的几项重大破坏性变更,并结合 [packages/pinia](https://link.gitcode.com/i/824

gitblog_00456的博客 481

图解说明JLink驱动与目标板电源匹配的关键细节

深入讲解JLink驱动安装及使用过程中,如何正确匹配目标板电源,避免常见通信故障。通过图解方式清晰展示关键连接细节,确保调试稳定可靠,是嵌入式开发中不可或缺的实战经验分享。

weixin_42173218的博客 431

前端学习笔记 6:Pinia

getters: {},actions: {},},})通过函数定义 Store,返回值同样是一个函数,且通常以的方式命名。state:Store 的状态(数据)getters:计算属性(类似于computed的返回值)actions:Store 的方法// 定义 state// 定义 getter// 定义 action})

梦幻天空 826

AUTOSAR入门

一、AUTOSAR是什么 AUTOSAR组织自己的介绍是 AUTOSAR (AUTomotive Open System ARchitecture) is a worldwide development partnership of vehicle manufacturers, suppliers, service providers and companies from the automot...

天涯遍地是小草的博客 3万+

ABAP CDS HAVING 全解析:聚合之后的精准过滤、最佳实践与可运行示例

摘要: 本文针对具备ABAP与CDS基础的开发者,详解HAVING在ABAP CDS中的核心用法。HAVING专用于过滤GROUP BY后的聚合结果(如SUM、COUNT),与WHERE的分工明确:前者处理聚合值,后者过滤原始记录。通过销售额阈值、质量分析、财务对账三类典型场景,结合性能优化建议(如优先使用WHERE索引过滤),说明实际应用。文中提供经典CDS View与View Entity两种实现代码,并附Open SQL消费示例,帮助开发者快速落地。常见误区(如聚合条件误写至WHERE)与规避方法亦被

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 221

Vue3 学习笔记 6:Pinia

本文介绍了Vue3状态管理库Pinia的基本使用。首先创建测试项目,包含两个组件(Count和LoveTalk)。然后安装Pinia并配置main.ts。重点演示了如何定义store(count.ts),管理state数据(sum),以及组件中读取和修改state的两种方式(直接访问和通过$state属性)。最后提到处理多个state数据时可以批量修改。文章提供了完整的代码示例,适合Pinia初学者快速上手。

梦幻天空 1389

ROS2 - 乐动激光雷达 LD06

STL-06P 主要由激光测距核心,无线传电单元,无线通讯单元,角度测量单元、电机驱动单元和机械外壳组成。STL-06P 测距核心采用 DTOF 技术,可进行每秒 5000 次的测距。每次测距时,雷达发射出红外激光,激光遇到目标物体后被反射到单光子接收单元。

机器人控制与仿真应用 3489

VUE|学习笔记⑥(Pinia)

这里就用到了之前学习过的【toRefs】,这样确实是可以实现将数据提取出来并保留响应式,但是从控制台中输出一下解构后的值就可以看到,这里的【toRefs】将store中所有的东西都变成了一个ref对象,但是事实上这样是有点多余的。但是这里其实我第一次请求的时候后台报错了,但是我检查了代码应该是没有什么问题,最后发现是网址请求太多次了,如果你们也有这样的问题可以换一个网址试一下,但是代码也需要做一些简单修改,这里就不多说了。官网上说的是,你要将那些共享的数据交给集中式状态管理而不是组件自身的数据。

2403_89168113的博客 2020

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

vue3+vuex+pinia学习笔记

vue3+vuex+pinia学习笔记

weixin_41241991的博客 846

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Pinia学习笔记

pinia学习笔记

m0_61989957的博客 409
上一篇: element-plus组件之Upload(2.0)
下一篇: 前端学习笔记(1.0)
mez_Blog
mez_Blog 新星创作者: 前端开发技术领域 新星创作者: 前端开发技术领域
博客等级 码龄9年 1万+粉丝 346原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mez_Blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值