vue3-Pinia
- Pinia 是 Vue.js 的一个状态管理库,用于在 Vue 应用程序中管理共享状态。它是 Vuex 的后继者,提供了一个简单、直观且灵活的方式来处理应用中的全局状态,比如用户登录信息、应用配置、购物车数据等。
- 与 Vuex 相比,Pinia 有更简洁的 API 和更好的类型支持(在 Type - Script 项目中),使得开发者能够更高效地管理应用状态
Pinia基本使用
Store
是一个保存:状态、业务逻辑的实体,每个组件都可以读取、写入它它有三个概念:
state
、getter
、action
,相当于组件中的:data
、computed
和methods
安装pinia
npm i pinia
使用pinia
// main.ts // 引入createPinia
import {createPinia} from "pinia"; const app = createApp(App) app.use(router) // 创建pinia
const pinia = createPinia()
// 使用pinia,在app挂载之前
app.use(pinia) app.mount('#app')存储数据,创建store文件夹,存放store相关代码(和vuex一样)
State:用于数据的存储(对象类型数据),是store中唯一数据源
// 引入defineStore import {defineStore} from "pinia"; // 官方推荐命名与hooks一样,use开头 // 第一个参数可以理解为给Store命名,这个名称在整个应用程序的 Pinia 实例中必须是唯一的,它就像是一个标识符,用来区分不同的 Store
// 第一个参数可以写成和文件名字一样
// 第二个参数是一个配置对象
export const useStatusStore = defineStore("status", { // 存储数据的地方-Pinia唯一的数据源
// state必须是一个函数,且返回一个对象
state() {
// 定义一个flag和isShow
return {flag:0,isShow:true}
}, })
读取数据
// 引入useStatusStore import {useStatusStore} from "@/store/status"; // statusStore是一个reactive响应式对象
const statusStore = useStatusStore() // 读取flag
// statusStore是reactive响应式对象,但是里面的属性是ref的响应式对象
// 虽然是ref响应式对象,但是读取不需要.value,只有我们手动ref(xx)创建数据的时候需要.value
console.log(statusStore.flag)
// 通过$state读取,$state是一个特殊的属性,
// 它代表了整个 store(仓库)的状态对象。这个状态对象包含了所有在state函数中定义的状态属性 // 也可以这样读取
console.log(statusStore.$state.flag)
pinia修改数据
直接修改
// 直接修改即可,不需要像vuex一样提交方法 statusStore.flag = 1
使用$patch方法
$patch
可以在一次操作中完成多个状态属性的更新,减少了多次触发状态更新机制的开销,提高效率//patch用于批量更新 store中的状态
//参数是一个对象,要修改的数据名-要改的值,支持批量修改
statusStore.$patch({
// flag改成1 isShow改成false
flag: 1,
isShow:false
})
actions修改
使用actions需要先在Store里面配置actions
export const useStatusStore = defineStore("status", { // state必须是一个函数,且返回一个对象
state() {
return {flag: 0, isShow: true}
},
// actions是一个对象,里面放置的是一个一个的动作方法,用于响应组件中的动作
actions:{
// 修改flag
setFlag(value:number){
// 可以对数据进行一些其他逻辑处理
this.flag = value
}
} })
然后在组件中直接调用方法进行修改
const statusStore = useStatusStore()
statusStore.setFlag(1)
storeToRefs读取数据
- 借助
storeToRefs
将store
中的数据转为ref
对象,方便在模板中使用。pinia
提供的storeToRefs
只会将数据做转换,而Vue
的toRefs
会转换store
中所有
// 引入
import {storeToRefs} from "pinia";
// let {flag,isShow} = statusStore 如果直接解构拿取数据,会丢失响应式
// 使用toRefs解构,可以实现解构并且响应式,但是是将数据、方法都转换了,不管有没有用
// let {flag,isShow} = toRefs(statusStore)
// 使用storeToRefs解构,只会关注Store里面的数据,不关注方法
let {flag, isShow} = storeToRefs(statusStore)
getters
当
state
中的数据,需要经过处理后再使用时,可以使用getters
配置
在Store里面写getters配置
export const useStatusStore = defineStore("status", { state() {
return {flag: 0, isShow: true}
},
actions: { setFlag(value: number) {
this.flag = value
}
},
// getters是一个配置对象,类似计算属性
getters: {
// doubleFlag属性,值是flag的双倍
doubleFlag(): number {
return this.flag * 2
},
// 箭头函数
doubleFlag1: state => state.flag * 2 } })
调用getters
statusStore.doubleFlag
statusStore.doubleFlag1
$subscribe
通过 store 的
$subscribe()
方法侦听state
及其变化
const statusStore = useStatusStore()
// 类似于监视属性,当Store里的数据发生变化的时候触发,接受一个回调函数
statusStore.$subscribe((mutate, state) => {
// mutate:包含有关状态变化详细信息的对象
// state:一个只读的对象,表示 store 在状态变化后的最新状态
console.log(mutate,state)
})
Pinia组合式写法
import {defineStore} from "pinia";
import {reactive} from "vue";
// 组合式写法,第二个参数不是对象了,是一个回调函数
export const useStatusStore = defineStore("status", () => {
// 在Store里面定义响应式数据,相当于在state里面定义了userList,userList就是state
const userList = reactive({id: "001", name: "001", age: 11})
// 相当于在getters里面定义doubleAge,调用需要以方法的形式调用,需要加括号
function doubleAge() {
return userList.age * 2
}
// 相当于在actions里面定义getUser,调用需要以方法的形式调用,需要加括号
function getUser() {
return userList
}
// 将数据暴露出去
return {userList,doubleAge,getUser}
})
vue3-Pinia的更多相关文章
- Vite-Admin后台管理系统|vite4+vue3+pinia前端后台框架实例
基于vite4.x+vue3+pinia前端后台管理系统解决方案ViteAdmin. 前段时间分享了一篇vue3自研pc端UI组件库VEPlus.这次带来最新开发的基于vite4+vue3+pinia ...
- taro+vue3+TS+Pinia+tailwindcss+NutUI项目创建与开发
一.初始化 1.Taro 基本安装并初始化项目 npx @tarojs/cli init WechatAppDemo -选择框架:vue3 -是否使用ts?y -请选择css预编译器:无 -请选择we ...
- 在Vue3项目中使用pinia代替Vuex进行数据存储
pinia是一个vue的状态存储库,你可以使用它来存储.共享一些跨组件或者页面的数据,使用起来和vuex非常类似.pina相对Vuex来说,更好的ts支持和代码自动补全功能.本篇随笔介绍pinia的基 ...
- 基于 vite 创建 vue3 全家桶项目(vite + vue3 + tsx + pinia)
vite 最近非常火,它是 vue 作者尤大神发布前端构建工具,底层基于 Rollup,无论是启动速度还是热加载速度都非常快.vite 随 vue3 正式版一起发布,刚开始的时候与 vue 绑定在一起 ...
- 使用Vite快速构建Vue3+ts+pinia脚手架
一.前言 vue3的快速更新,很多IT发展快的地区在22开始都已经提上日程,小编所在的青岛好像最近才有点风波.vue3的人才在青岛还是比较稀缺的哈,纯属小编自己的看法,可能小编是个井底之蛙!! vue ...
- vue3中pinia的使用总结
pinia的简介和优势: Pinia是Vue生态里Vuex的代替者,一个全新Vue的状态管理库.在Vue3成为正式版以后,尤雨溪强势推荐的项目就是Pinia.那先来看看Pinia比Vuex好的地方,也 ...
- Vue3 Vite3 状态管理 pinia 基本使用、持久化、在路由守卫中的使用
在<基于 vite 创建 vue3 项目>一文中整合了 pinia,有不少伙伴不知道 pinia 是什么,本文简单介绍 pinia.主要包括三方面: pinia 的基本用法,在<基于 ...
- 实战进阶 Vue3+Axios+pinia
实战进阶 Vue3+Axios+pinia 创建文件utils/request.js import Axios from 'axios'; export const request = Axios.c ...
- vite+ts+vue3+router4+Pinia+ElmPlus+axios+mock项目基本配置
1.vite+TS+Vue3 npm create vite Project name:... yourProjectName Select a framework:>>Vue Selec ...
- 2022.07.13 vue3下pinia的简单使用及持久化
使用前说明: 当前demo使用了vue3 + vite + typescript + pinia搭建的简单项目,主要介绍了在单文件组件(sfc)基础上使用pinia的用法,懒得看api的兄弟们,来这瞅 ...
随机推荐
- 事件触发器TRIGGER
我所理解的事件 MYSQL触发器 就好比是 JavaScript 中的 Object.defineProperty,通过观察某些行为,然后做些事情 创建触发器 DELIMITER $$ CREATE ...
- 中文关键字检索分析-导出到csv或者excel-多文件或文件夹-使用python和asyncio和pandas的dataframe
1.02版本 把原来的tab一个个拼接成文件输出,改成pandas的dataframe 使用asyncio库来使用协程,但是测试下来速度好像是差不多的.可能速度太快了,没能很好的测出来差异. 原来的最 ...
- 云边协同的RTC如何助力即构全球实时互动业务实践
由 51 CTO 主办的"WOT 全球技术创新大会 2023·深圳站"于 11 月 24 日 - 25 日召开,即构科技后台技术总监肖潇以"边缘容器在全球音视频场景的 ...
- 小tips:node版本管理工具nvm
nvm是node版本管理工具 为了解决node各种版本存在不兼容现象 nvm是让你在同一台机器上安装和切换不同版本的node的工具 安装 nvm-windows 最新下载地址: https://git ...
- C++面试题整理 2
8. C++11新特性又哪些 自动类型推导auto,智能指指针(share_ptr,unique_ptr等),for循环简化,线程相关的(std::thread/std::mutex),空指针null ...
- RabbitMQ——死信队列介绍和应用
死信和死信队列的概念 什么是死信?简单来说就是无法被消费和处理的消息.一般生产者将消息投递到broker或者queue,消费者直接从中取出消息进行消费.但有时因为某些原因导致消息不能被消费,导致消息积 ...
- bfs与dfs ,全球变暖——蓝桥problems178
问题描述: ....... .##.... .##.... ....##. ..####. ...###. ....... 有一张还以N*N的像素照片,"."表示海洋," ...
- [TK] 送礼物
题解引用 引理1: 区间 \([l,r]\) 是最优解的必要不充分条件是: \(l,r\) 分别是区间的最小值与最大值. 这很显然,若假设不成立,当区间向内缩小时,一定有分子不变,分母变小,进而算出更 ...
- ZRAM的Swap功能和 SWAP分区有什么区别
ZRAM(压缩内存块设备)和传统的SWAP分区都是Linux系统中用来增加可用内存的方法,但它们的工作原理和实现方式有很大的区别: ZRAM 压缩内存:ZRAM使用压缩算法将数据存储在内存中.这样,当 ...
- 云原生周刊:K8s 的 YAML 技巧 | 2023.12.4
开源项目推荐 Helmfile Helmfile 是用于部署 Helm Chart 的声明性规范.其功能有: 保留图表值文件的目录并维护版本控制中的更改. 将 CI/CD 应用于配置更改. 定期同步以 ...