当前位置: 首页 > news >正文

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)dconst userId=ref(6699)//用户IDconst 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";
//导入storeconst  userStore =useUser()
//得到 user 模块返回的对象
</script>

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

修改Stroe

<script setup>
import {useUser} from "@/store/user.js";
//导入storeconst  userStore =useUser()
//得到 user 模块返回的对象function updateUser(){userStore.updateUser('1334')
}
</script>

Action异步

Store

// src/store/user.jsconst 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

//getterconst cmpLevel=computed(()=>{return level.value*2//该函数用来计算等级})return {cmpLevel}
// src/store/user.js

在这里插入图片描述

http://www.lryc.cn/news/410008.html

相关文章:

  • 手撕数据结构02--二分搜索(附源码)
  • 单片机工程师继续从事硬件设计还是涉足 Linux 开发?
  • 《昇思25天学习打卡营第25天|第28天》
  • Flutter Dio网络请求报错FormatException: Unexpected character
  • 关于@JsonSerialize序列化与@JsonDeserialize反序列化注解的使用(密码加密与解密举例)
  • 第二届世界科学智能大赛逻辑推理赛道:复杂推理能力评估 #大模型技术之逻辑推理方向 #Datawhale #夏令营 <二>
  • C# 关于Linq延迟查询
  • Navicat For Mysql连接Mysql8.0报错:客户端不支持服务器请求的身份验证协议
  • 以西门子winCC为代表的组态界面,还是有很大提升空间的。
  • HomeServer平台选择,介绍常用功能
  • 记录一个k8s集群zookeeper部署过程
  • TapData 信创数据源 | 国产信创数据库 TiDB 数据迁移指南,加速国产化进程,推进自主创新建设
  • 开始写人工智能
  • 盘点.软件测试模型
  • 燃气安全无小事,一双专业劳保鞋让你步步安心!
  • springboot校园服装租赁系统-计算机毕业设计源码30824
  • 线性回归和逻辑回归揭示数据的隐藏模式:理论与实践全解析
  • 掌握采购询价软件:高效比较供应商报价的技巧
  • AMQP-核心概念-终章
  • 在WPF中使用WebView2详解
  • 僵尸进程的例子
  • 消息中间件分享
  • 12. kubernetes调度——污点Taint和容忍Toleration
  • 第100+18步 ChatGPT学习:R实现SVM分类
  • react函数学习——useState函数
  • 方天云智慧平台系统 GetCompanyItem SQL注入漏洞复现
  • C语言同时在一行声明指针和整型变量
  • thinkphp框架远程代码执行
  • 【公式】博弈论中的核心算法:纳什均衡公式解析
  • 计算机网络面试题2