Pinia介绍及简单示例

简介: Pinia介绍及简单示例

Pinia 是一个基于 Vue 3 的状态管理插件,旨在提供一种简单、直观的方式来管理应用程序的状态。与其他状态管理库(如 Vuex)相比,Pinia 更加轻量级、易于使用和可扩展。

Pinia 的主要特点包括:

1. 面向对象的 API:通过使用类来定义状态和操作,可以更加清晰地组织应用程序的状态逻辑。


2. 支持 TypeScript:Pinia 提供了完整的 TypeScript 支持,使得类型检查和编辑器提示更加友好。


3. 插件系统:Pinia 提供了一种简单的方式来扩展其功能,例如在状态变化时触发钩子、在存储中使用加密等等。


4. 懒加载:Pinia 可以根据需要动态地加载状态,使得应用程序的初始加载速度更快。

Pinia 的使用也非常简单,只需要在应用程序中实例化一个 Pinia 实例,并在组件中使用 `useStore` 函数来访问应用程序的状态。以下是一个简单的示例:

javascript

import { createPinia, defineStore } from 'pinia'
const pinia = createPinia()
const counterStore = defineStore({
  id: 'counter',
  state: () => ({
    count: 0,
  }),
  actions: {
    increment() {
      this.count++
    },
  },
})
export default {
  setup() {
    const counter = useStore(counterStore)
    return {
      count: counter.count,
      increment: counter.increment,
    }
  },
}

在这个示例中,我们首先创建了一个 Pinia 实例。然后,我们使用 `defineStore` 函数来定义一个名为 `counter` 的状态。这个状态包含一个名为 `count` 的属性和一个名为 `increment` 的操作。最后,我们可以在组件中使用 `useStore` 函数来访问这个状态,并使用它来渲染界面和更新状态。


Pinia 同样也支持使用插件来扩展其功能。以下是一个使用插件来加密存储的示例:

javascript

import { createPinia } from 'pinia'
import { encrypt, decrypt } from './encryption'
const pinia = createPinia()
const encryptedStoragePlugin = (store) => {
  const storage = window.localStorage
  const get = (key) => {
    const value = storage.getItem(key)
    return value ? JSON.parse(decrypt(value)) : null
  }
  const set = (key, value) => {
    storage.setItem(key, encrypt(JSON.stringify(value)))
  }
  return {
    onGlobalSetup() {
      store.$subscribe((mutation) => {
        set(mutation.key, mutation.value)
      })
    },
    state: Object.fromEntries(
      Object.keys(store.state).map((key) => [key, get(key) ?? store.state[key]])
    ),
  }
}
pinia.use(encryptedStoragePlugin)


在这个示例中,我们首先定义了一个 `encryptedStoragePlugin` 插件,它使用加密算法来存储应用程序的状态。在插件中,我们首先获取到 `localStorage` 对象,并定义了两个函数 `get` 和 `set` 来读取和写入状态。然后,在 `onGlobalSetup` 钩子中,我们订阅了所有状态变化,并将它们写入到 `localStorage`。最后,我们返回一个包含所有状态的对象,将其作为插件的初始化状态。使用 `Object.fromEntries` 函数可以将一个键值对数组转换为一个对象。


要使用这个插件,我们只需要在创建 Pinia 实例时调用 `pinia.use(encryptedStoragePlugin)` 即可。


以上就是对于 Pinia 的简单介绍。通过 Pinia,我们可以更加清晰、直观地组织应用程序的状态,并使用插件来扩展其功能。同时,Pinia 的 TypeScript 支持也使得我们在开发过程中更加自信和高效。

相关文章
|
7月前
|
JSON 前端开发 JavaScript
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
3分钟让你学会axios在vue项目中的基本用法(建议收藏)
473 0
|
7月前
|
存储 JavaScript 容器
vuex的五个属性及使用方法示例
vuex的五个属性及使用方法示例
154 0
|
2天前
|
JavaScript API 数据处理
vue3使用pinia中的actions,需要调用接口的话
通过上述步骤,您可以在Vue 3中使用Pinia和actions来管理状态并调用API接口。Pinia的简洁设计使得状态管理和异步操作更加直观和易于维护。无论是安装配置、创建Store还是在组件中使用Store,都能轻松实现高效的状态管理和数据处理。
16 3
在 Vue3 中,如何使用 setup 函数创建响应式数据?
在 Vue3 中,如何使用 setup 函数创建响应式数据?
|
4月前
|
存储 资源调度 JavaScript
Vue3如何使用Pinia详细介绍、pinia持久化存储(pinia-plugin-persistedstate详细配置)
Vue3如何使用Pinia详细介绍、pinia持久化存储(pinia-plugin-persistedstate详细配置)
|
5月前
|
缓存 JavaScript 数据处理
vue computed作用特点及使用场景及示例
vue computed作用特点及使用场景及示例
103 3
|
7月前
|
存储 JavaScript
vuex的基本用法
Vuex是Vue.js的状态管理库,用于集中存储和管理共享状态。通过创建Vuex store实例,定义`state`(如`count`)和`mutations`(如`increment`),组件可使用`this.$store.state`访问状态,`this.$store.commit`修改状态。当应用复杂时,可将状态分割成带命名空间的模块,如`cart`,组件内通过`this.$store.state.cart`和`this.$store.commit('cart/addItem')`进行访问和修改。
|
7月前
|
缓存 JavaScript
vuex的讲解与相关用法
vuex的讲解与相关用法
30 0
|
7月前
|
存储 JavaScript
vue3中如何使用vuex
首先,在这里回答一个粉丝的问题,为什么有local storage 和session storage还要使用vuex,这里我解释一下,我们要明白浏览器的存储和vuex的存储的不同点,首先,浏览器存在本地,vuex存在内存里,所以vuex刷新会丢失,从现在来看,好像存在浏览器里会更好,但是,有个问题时,存在浏览器里不是响应式的啊,只有存在vuex才是响应式啊,我们通过计算属性或者watch监听下在同步更新下就行,但是,浏览器不支持响应式,所以,我们为了规避掉vuex的的刷新丢失的问题,所以,当刷新时,从浏览器的存储里拿数据,防止在vuex里面,在传给组件,借助vuex的特性,来实本地存储响应式。
|
JavaScript 前端开发 API
Vue3 跟着尤雨溪学 TypeScript 之 Ref 类型从零实现
Vue3 中,ref 是一个新出现的 api,不太了解这个 api 的小伙伴可以先看 官方api文档。 简单介绍来说,响应式的属性依赖一个复杂类型的载体,想象一下这样的场景,你有一个数字 count 需要响应式的改变。