使用pinia进行全局数据共享

10 篇文章 0 订阅
1、简介

        在vue2中组件之间的数据传递有很多种实现方式,可以通过事件、事件总线、发布订阅、以及vuex进行全局数据共享,关于vuex的详细介绍见博客 Vue中使用vuex进行全局数据共享处理_vue全局数据共享-CSDN博客 ;在vue3中,使用pinia作为vuex的替代品,pinia详细介绍见官网 介绍 | Pinia 中文文档

2、安装pinia依赖
2.1、使用npm安装
npm i pinia
2.2、使用pnpm安装
pnpm i pinia
3、配置pinia

        在main.ts文件中,添加如下内容:

import {createPinia} from "pinia"
const pinia = createPinia()
const app = createApp(App)
app.use(pinia)
app.mount('#app')
4、pinia的使用
4.1、store定义

        pinia有三个概念:state、getters、actions,使用pinia创建一个store如下:

import {defineStore} from 'pinia'
export const tokenStore =  defineStore('loginKey',{
    actions: {},  // 定义操作数据方法
    state(){      // 定义数据
        return {
            member: {}  
        }
    },
    getters: {    // 定义计算属性

    }
})
4.2、数据存储和读取

        如下示例以保存对象数据为例。

4.2.1、数据存储
<template>
  <h2>当前值为:{{ test.member }}</h2>
</template>

<script setup lang="ts" name="Count">
  // 引入对应的 xxxStore	
  import {testStore} from '@/store/test.ts'
  
  // 调用 xxxStore得到对应的store
  const test = testStore()
  test.member = ***
</script>
4.2.2、数据读取
<template>
  <a-layout-header class="header">
    <div style="float: right; color: white">
{{member.id}} &nbsp; &nbsp;
  </a-layout-header>
</template>

<script lang="ts" setup name="GET">
import {ref} from "vue";
//  @ts-ignore
import {testStore} from '@/pinia/test.ts'
import {storeToRefs} from "pinia";

const test = testStore()
const {member} = storeToRefs(test)

</script>
4.3、修改数据(三种方式 )
 4.3.1、单独修改某一变量   
// 第一种
test.member = {}
4.3.2、批量修改
// 第二种(批量修改)
testStore.$patch({
  aa:999,
  bb:'test',
  member: {}
})
4.3.3、使用actions修改
// 第三种(借助actions修改)
import { defineStore } from 'pinia'
export const testStore = defineStore('test', {
  actions: {
    //加
    increment(value:number) {
      if (this.sum < 10) {
        //操作countStore中的sum
        this.sum += value
      }
    },
    //减
    decrement(value:number){
      if(this.sum > 1){
        this.sum -= value
      }
    }
  },
  state(){
    return {
        sum: 0
    }
})
// 在组件中调用 actions 方法
const test = testStore()
// 调用对应action
test.incrementOdd(val)
4.4、使用计算属性getters

// 第三种(借助actions修改)
import { defineStore } from 'pinia'
export const testStore = defineStore('test', {
  actions: {
    //加
    increment(value:number) {
      if (this.sum < 10) {
        //操作countStore中的sum
        this.sum += value
      }
    },
    //减
    decrement(value:number){
      if(this.sum > 1){
        this.sum -= value
      }
    }
  },
  state(){
    return {
        sum: 0
    }
  },
getters:{
    bigSum:(state):number => state.sum *10
  }
})
5、总结

        本文详细介绍如何通过pinia 进行全局数据共享,在Vue3中新增组合是API,pinia也支持组合式方式定义,具体可以详见官网,只是定义方式不同,使用方式不变。

        本人是一个从小白自学计算机技术,对前端、运维、后端、各种中间件技术、大数据等有一定的学习心得,想获取自学总结资料(pdf版本)或者希望共同学习,关注微信公众号:it自学社团。后台回复相应技术名称/技术点即可获得。(本人学习宗旨:学会了就要免费分享)

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Pinia是一个基于Vue.js的状态管理库,用于在Vue.js应用程序中传递和接收数据。Pinia提供了一种简单而强大的方式来管理应用程序的状态,并使得在组件之间共享数据变得更加容易。 在Pinia中,数据的传递和接收主要通过以下几个步骤完成: 1. 创建一个Pinia实例:首先,你需要创建一个Pinia实例,该实例将用于管理应用程序的状态。你可以在Vue应用程序的入口文件中创建一个全局的Pinia实例,或者在需要使用状态管理的组件中创建一个局部的Pinia实例。 2. 定义状态:在Pinia中,你可以通过定义状态来管理应用程序的数据。你可以创建一个状态类,该类包含了需要共享的数据和相关的操作方法。你可以在状态类中定义getter和setter方法来获取和修改数据。 3. 注册状态:一旦你定义了状态类,你需要将其注册到Pinia实例中。通过调用Pinia实例的`use`方法并传入状态类,你可以将其注册到Pinia实例中,并使其可在应用程序的其他组件中使用。 4. 在组件中使用状态:一旦状态被注册到Pinia实例中,你可以在组件中使用`useStore`函数来获取该状态的实例。通过调用`useStore`函数并传入状态类,你可以在组件中获取该状态的实例,并使用其中定义的数据和方法。 5. 在组件中传递和接收数据:一旦你获取了状态的实例,你可以在组件中通过访问状态的数据属性来获取数据。你可以将数据传递给其他组件,可以通过调用状态的方法来修改数据。 总结起来,Pinia通过创建Pinia实例、定义状态、注册状态和在组件中使用状态的方式来实现数据的传递和接收。通过这种方式,你可以在Vue.js应用程序中方便地管理和共享数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

知其_所以然

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

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

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

打赏作者

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

抵扣说明:

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

余额充值