Pinia的使用和插件扩展

Pinia 是什么?

Pinia 起始于 2019 年 11 月左右的一次实验,其目的是设计一个拥有组合式 API 的 Vue 状态管理库。
类似 Vuex, 也是vue官方的状态管理工具,允许跨组件或页面共享状态(作者是 Vue 核心团队成员)。

在不同版本的 Vue 中,所使用的 Vuex 版本是不一样的。
Vue2 中需要使用 Vuex 3.x的版本,而在 Vue3 中需要使用 Vuex 4.x。
但是 Pinia 没有这个限制,无论是在 Vue2 中,还是在 Vue3 中均可以使用 Pinia,且不一定要与 Composition API 一起使用,API 的使用方式在两者中也是保持一致的。

Pinia 核心概念:
state: 状态
actions: 修改状态(包括同步和异步,pinia中没有mutations)
getters: 计算属性

回顾 Vuex

在Vue3中使用Vuex 4.x

省略安装和注册vuex

import {
    createStore } from 'vuex'

export default createStore({
   
  // 1、 存储所有全局数据
  state: {
   
     count: 100,
     num: 10,
     students: [{
    name: 'mjy', age: '18'}, {
    name: 'cjy', age: '22'}, {
    name: 'ajy', age: '21'}]
  },
  // 2、 需要通过计算获取state里的内容获取的数据
  // 只能读取不可修改
  getters: {
   
     more20stu (state) {
    return state.students.filter(item => item.age >= 20)}
  },
  //  3、定义对state的各种操作
  // vuex的store状态更新的唯一方式:提交 mutation 
  // 简单的直接赋值操作可以直接放到mutation里(同步操作)
  mutations: {
   
    increment (state) {
   
      state.count++
    },
    sum (state, num) {
   
     state.count += num
   }
  },
  // 4、定义对state的各种操作
  // 在action里写异步操作,需要在mutations里更新
  actions: {
   
  // context 上下文对象,可以理解为store
  // 通过 commit 触发 mution 中的方法
   sum_actions (context, num) {
   
     setTimeout(() => {
   
       context.commit('sum', num)  // 通过context去触发mutions中的sum
     }, 1000)
   }
  },
  // state中信息过长时
  // 用来将state进行分割
  // 如下,将state树分割出一个user state。
  // user.js 里面也有state/getters/mutation/actions/modules几部分
  modules: {
   
	user: ModuleUser,
  }
})

在组件中使用Store中的数据或方法

<template>
  <span>{
  {$store.state.count}}</span>
  <span>{
  {$store.state.num}}</span>
  <h2>{
  {$store.getters.more20stu}}</h2>
  <button @click="store.dispatch('sum_actions', num)"></button>
</template>

<script>
// 导入 useStore 函数
import {
      useStore } from 'vuex'
const store = useStore()
store.commit('increment')
</script>

Pinia 的使用

以Vue3+ts为例

安装

npm install pinia

引入(创建pinia实例)

// main.js
import {
    createApp } from 'vue'
import {
    createPinia } from 'pinia'
import App from './App.vue'

const app = createApp(App)
const pinia = createPinia()

app.use(pinia)
app.mount('#app')

Store

🔶 什么是Store?

store简单来说就是数据仓库的意思,我们数据都放在store里面。当然你也可以把它理解为一个公共组件,只不过该公共组件只存放数据,这些数据我们其它所有的组件都能够访问且可以修改

🔶 创建Store

我们需要使用pinia提供的defineStore()方法来创建一个store,该store用来存放我们需要全局使用的数据。

例:首先在项目src目录下新建store文件夹,用来存放我们创建的各种store,然后在该目录下新建user.ts文件,主要用来存放与user相关的store。

Option Store

defineStore 接收两个参数:
name: 模块的名称,一个字符串,必须是唯一的,多个模块不能重名,Pinia 会把所有的模块都挂载到根容器上。
option: 配置项,一个对象,里面的选项和 Vuex 差不多。
state 用来存储全局状态,它必须是箭头函数,为了在服务端渲染的时候避免交叉请求导致的数据状态污染所以只能是函数,而必须用箭头函数则为了更好的 TS 类型推导;
getters 就是用来封装计算属性;
actions 就是用来封装业务逻辑,修改 state。

// /src/store/user.ts
import {
    defineStore } from 'pinia'

// 第一个参数是应用程序中 store 的唯一 id
export const useUsersStore = defineStore('users', {
   
  // 其它配置项
    state: () => {
    return {
   } },
    getters: {
    },
    actions: {
    }
  • 31
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 3 的状态管理库 Pinia 是一个基于 Vue 3 Composition API 的轻量级、强大且易于使用的状态管理解决方案。它提供了类似于 Vuex 的功能,但是与 Vuex 不同,Pinia 不依赖于 Vue 2 的选项 API,而是完全基于 Composition API 构建。 Pinia使用和理解包括以下几个方面: 1. 安装和创建 Pinia 实例:首先,你需要通过 npm 或 yarn 安装 Pinia 包。然后,在你的应用程序的入口文件中,通过 `createPinia` 函数来创建 Pinia 实例。 2. 创建并使用 Store:在 Pinia 中,你可以通过 `defineStore` 函数来定义一个 Store。定义 Store 时,你需要提供一个唯一的标识符,并定义该 Store 的状态、操作和 getters。然后,你可以在组件中使用 `useStore` 函数来访问 Store 实例,并通过这个实例来获取/修改状态、调用操作等。 3. 组件中使用 Store:在组件中使用 Store 需要引入 `useStore` 函数,并传入你定义的 Store 标识符。然后,你可以像使用普通对象一样访问 Store 的状态、操作和 getters。 4. 在组件中监听状态变化:你可以使用 `watch` 函数或 `computed` 属性来监听 Store 中的状态变化,并在变化时执行相应的逻辑。 5. 动态注册 Store:Pinia 支持动态注册 Store。你可以使用 `registerStore` 函数来动态注册一个 Store,然后在需要的地方使用。 6. 在异步操作中使用 Store:Pinia 提供了 `actions` 函数来处理异步操作。你可以在 `actions` 函数中访问 Store 的状态和操作,并返回一个 Promise 对象。 7. 件和件的使用Pinia 还支持件系统,你可以通过件来扩展 Pinia 的功能。你可以通过 `use` 函数来使用件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值