Vue3 Pinia的创建与使用代替Vuex 全局数据共享 同步异步

介绍

提供跨组件和页面的共享状态能力,作为Vuex的替代品,专为Vue3设计的状态管理库。

  • Vuex:在Vuex中,更改状态必须通过Mutation或Action完成,手动触发更新。
  • Pinia:Pinia的状态是响应式的,当状态发生变化时,组件会自动更新,无需手动触发。

官方文档 :https://pinia.vuejs.org/zh/getting-started.html

使用Pinia对用户的登录信息进行保存

安装

npm install pinia

引入

import { createApp } from 'vue'
import App from './App.vue'
import { createPinia } from 'pinia'
const app =createApp(App)
app.use(createPinia())
app.mount('#app')

定义Stroe

目录结构:src/store/user.js

import  {defineStore} from  'pinia'
import {reactive, ref} from "vue";
//导入pinia

//user表示模块名
export const useUser =defineStore('user',()=>{

    //定义数据(state)d
    const userId=ref(6699)
    //用户ID
    const level =ref(10) //等级
    const userMsg=reactive({
        token:'addadgsadadadada',
        phone:'13111111111',
        age:13
    })
    //用户信息
 	 const list =ref([])
     

    //操作数据的函数(action 同步+异步)
    const updateUser=(newUserId)=>{
        userId.value=newUserId
    }
	//修改账号信息

    //数据返回出去 注:对象的形式
    return{
        userId,
        updateUser,
        userMsg
    }
})

读取Stroe

<template>
  <h1>用户ID{{userStore.userId}}</h1>
  <h1>用户信息{{userStore.userMsg}}</h1>
</template>
<script setup>
import {useUser} from "@/store/user.js";
//导入store

const  userStore =useUser()
//得到 user 模块返回的对象
</script>

读取成功
在这里插入图片描述

修改Stroe

<script setup>
import {useUser} from "@/store/user.js";
//导入store

const  userStore =useUser()
//得到 user 模块返回的对象

function updateUser(){
  userStore.updateUser('1334')
}
</script>

Action异步

Store

// src/store/user.js
 const getList=async  ()=>{
    const res =await axios.get('https://tools.mgtv100.com/external/v1/bank_names').then(r=>{
        list.value=r.data.data
    })
 }

组件

  <div v-for="item in userStore.list" :key="item.id">{{item.bank_name}}</div>
onMounted(()=>{
  getList()
})

function getList(){
  userStore.getList()
}

在这里插入图片描述


Getter计算

<template>
  <h1>计算后等级: {{userStore.cmpLevel}}</h1>
</template>

src/store/user.js

//getter
    const cmpLevel=computed(()=>{
        return level.value*2
        //该函数用来计算等级
    })

return {cmpLevel}
// src/store/user.js

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

生产队的驴.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值