小白也懂的 Pinia 基础知识全解

Pinia概述

Pinia是一个轻量级的状态管理库,状态管理库是用于管理应用程序全局状态的工具。

pinia官网:https://pinia.vuejs.org/zh/
在这里插入图片描述

以登录为例:

使用Pinia创建一个userStore来集中管理用户的登录状态和过期时间

  • 当用户登录成功时:
    设置userStore中用户的登录状态为已登录,并设置过期时间
  • 当用户退出登录时:
    修改userStore中用户的登录状态为未登录,并删除过期时间

Pinia的使用

安装命令:npmi pinia-plugin-persistedstate
在这里插入图片描述

Pinig 和 组件通信 的区别

虽然Vue提供的父传子、子传父以及跨组件通信也可以用于状态共享但在大型项目中,随着组件数量的增加,会导致以下问题:
1.组件之间传递大量的props,会使项目变得非常繁琐和难以维护
2.非父子组件间过度依赖provide/iniect,使状态散落在各个组件之间

Pinia 可以解决以下问题:

1.全局状态管理
所有组件都可以访问和修改状态,而不用在每个组件内部进行状态管理
2.简化组件之间的通信
避免在组件之间传递大量的props
3.状态持久化
可以将应用程序的状态保存到本地存储中,在应用程序重启后会保留状态,对于登录等场景非常有用

总的来说,Pinig可以处理大型项目中复杂的状态管理需求,而父传子、子传父以及跨组件通信,可以解决一些简单的状态传递问题,更适合小型项目。

Pinia 和 localStorage 的区别

  • localStorage
    LocalStorage只能存储字符串类型的数据LocalStorage有大小限制,通常为5MB左右
  • Pinia
    Pinia可以存储任何类型的数据,包括对象、数组等Pinia没有大小限制,可以存储大量的数据

总的来说,对于复杂的状态管理需求,使用Pinia是更好的选择,而对干简单的状态管理需求,使用localStorage是更简单的解决方案。

注:pinia持久化插件也是存储到localStorage中,为什么不直接使用localStorage?

  • 自动状态同步
    持久化插件自动将Pinia的状态存储到localStorage中
    无需手动处理状态的读取和写入
  • 易用性
    无需手动处理localStorage的键值对存储、数据转换等繁琐过程
  • 与Vue组件状态紧密集成
    持久化插件与Vue组件的响应式数据完美结合
    当状态改变时,依赖这些状态的组件会自动更新视图
    与仅仅从localStorage中读取静态数据相比更加灵活和强大
03-08
### Pinia Vue.js 状态管理库使用指南 #### 安装 Pinia 为了在项目中集成 Pinia,可以通过 npm 或 yarn 进行安装: ```bash npm install pinia ``` 或者 ```bash yarn add pinia ``` 完成安装之后,在创建 Vue 应用实例之前初始化 Pinia。 #### 初始化并配置 Pinia 下面展示如何在一个新项目里设置 Pinia: ```javascript import { createApp } from 'vue' import { createPinia } from 'pinia' const app = createApp(App) // 创建一个新的 Pinia 实例 app.use(createPinia()) app.mount('#app') ``` 这段代码展示了怎样引入 `createPinia` 函数,并将其作为插件注册到 Vue 应用程序中[^1]。 #### 定义 Store (商店) 定义一个简单的 store 可以通过调用 `defineStore` 方法来实现。这里有一个计数器的例子: ```typescript import { defineStore } from 'pinia' export const useCounterStore = defineStore('counter', { state: () => ({ count: 0, }), actions: { increment() { this.count++ }, }, }) ``` 此片段说明了如何利用 `defineStore` 来构建一个具有基本功能的 store,其中包含了状态(state)和动作(actions)。 #### 访问 Store 数据 组件内部访问 store 非常简单,只需要导入相应的 store 并调用即可: ```html <template> <div>{{ counter.count }}</div> <button @click="increment">Increment</button> </template> <script setup> import { useCounterStore } from './stores/counter' const counter = useCounterStore() function increment() { counter.increment() } </script> ``` 上述模板显示了如何在单文件组件(SFCs)内获取 store 的数据以及触发其方法。 #### 查看 Pinia Store 在 Vue Devtools 中的表现 一旦设置Pinia stores 后,就可以借助 Vue Devtools 工具查看这些 store 的实时变化情况。打开浏览器中的开发者工具,切换至 Vue 标签页就能看到所有已定义好的 store 列表及其当前的状态值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序媛夏天

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

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

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

打赏作者

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

抵扣说明:

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

余额充值