Pinia.js - Vue新一代状态管理器

举报
青年码农 发表于 2022/08/25 23:49:37 2022/08/25
【摘要】 Pinia.js是由Vue.js团队核心成员开发的新一代状态管理器,使用Composition Api进行重新设计的,也被视为下一代Vuex。它和Vuex有很多相似的地方,本质上是对Vuex做出了一些改进。与Vuex相比,Pinia.js去除了Vuex中对于同步函数Mutations和异步函数Actions的区分。直接在Act...

Pinia.js是由Vue.js团队核心成员开发的新一代状态管理器,使用Composition Api进行重新设计的,也被视为下一代Vuex。它和Vuex有很多相似的地方,本质上是对Vuex做出了一些改进。与Vuex相比,Pinia.js去除了Vuex中对于同步函数Mutations和异步函数Actions的区分。直接在Actions中便能够使用同步和异步方法,其次相比于Vuex,Pinia.js对于TypeScript的支持性更好

a74a88874635c22580fbd38ee8cdaf27.png

一 安装

可以使用 yarn 或者 npm 安装

d8863ba4e4177f532fbff1630b5a900d.png

安装成功会把依赖加在 package.json 的 dependencies 中。

5eee1c06ae0f360c854e5dc7aabf432d.png

二 配置

安装成功后,根据Pinia官方给的格式建议,在项目的 src 目录下新建 store 文件夹,文件夹下新建 index.ts(全局配置文件) 和 modules(分模块)文件夹

ed09ae766dd834002e3a0a9dc728d6fd.png

在main.ts文件中进行全局挂载store文件:

cf6434e1159a8489bb637c1e38e6faf6.png

这样全局挂载就完成了,接下来在 modules 写一个小 demo 

三 示例

2555d5b66165543bc56bc5862febe454.png

在使用仓库状态数据前,需要先使用 defineStore() 进行定义一个仓库,需要使用唯一的名字进行命名。我们看下这个方法里面提供哪些属性-pinia.d.ts

76676af41aac96599b7e389e50040845.png

可以看到有state、getters、actions,和 Vuex 很像。

state:存放组件之间共享的数据。


   
  1. state: () => {
  2.     return {
  3.       count: 0,
  4.       arr:[1,2,3,4],
  5.       obj:{
  6.         name:"li",
  7.         age:20
  8.       }
  9.     };
  10.   },

注意,将 store 解构之后,就不是响应式的了,如果想要解构,则需要使用 storeToRefs 函数包裹。

getters:对state中存储的数据进行过滤操作


   
  1. getters:{
  2.     // 依赖state
  3.     doubleCount(state){
  4.       return state.count *2
  5.     },
  6.     // 依赖其他的getters, :number 是指定返回值类型为number类型
  7.     otherCount():number{
  8.       return this.doubleCount + 1
  9.     }
  10.   }

actions:方法,同步、异步都支持


   
  1. actions: {
  2.     increment() {
  3.       this.count++;
  4.     }

在Vue中使用上面的store,

fd2a98f2594d9bfe37af78ef5ef7ef53.png

点击一次add按钮,就会给count+1

4080ef0cecbaa4f4b4fba27f69e06b2d.png

除了上面这种方式修改state以外,还可以通过

1 $patch 修改


   
  1. counter.$patch({count:counter.count})
  2. 2 $state

   
  1. counter.$state = {counter:10}
  2. 3 action
counter.increment()
  

四 参考文档

官方:https://pinia.vuejs.org/introduction.html

github:https://github.com/vuejs/pinia

文章来源: blog.csdn.net,作者:NMGWAP,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/NMGWAP/article/details/126516071

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。