自上月从上海结束工作回来 在家闲来无事 想写点东西打发时间 也顺便学习学习新的技术。偶然发现了 pinia 据说比vuex好用些 所以便搭了个demo尝试着用了下 感觉确实不错,于是便有了这篇随笔。

那么废话不多说 直接开始吧。(附pinia官网地址:https://pinia.web3doc.top/)

1.安装

yarn add pinia
# 或者使用 npm
npm install pinia

2.项目中引入

  vue2引入方法(直接复制官网的)

import { createPinia, PiniaVuePlugin } from 'pinia'

Vue.use(PiniaVuePlugin)
const pinia = createPinia() new Vue({
el: '#app',
// 其他选项...
// ...
// 注意同一个 `pinia` 实例可以在多个 Vue 应用程序中使用
// 同一个页面
pinia,
})

  vue3引入方法 (引入createPinia函数后实例化下 然后直接挂载到vue的use函数即可)

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

3.定义一个 Store

  在src目录下新建 store 目录 然后新建一个js或者ts文件 然后导入pinia的 defineStore 函数  函数的第一个参数是当前store的 id 相当于key 第二个是一个对象 里面就是我们存放数据的地方了

 export default 默认导出是为了方便我们其他页面引用这个store 这样 一个store就定义好了
export default defineStore('defaultStore',{
state:()=>{
return {
count:1
}
},
getters:{ },
actions:{
setCount(){
this.count++
}
} })

4.使用store

定义好了之后 那就是怎么使用我们的store了

<template>
<div class="root-box">
count == {{store.count}} //3.然后就可以直接使用了
</div>
</template> <script setup lang="ts">
import defaultStore from "./../../store"; //1.引入我们刚刚定义的store
import {onMounted} from 'vue'
const store = defaultStore()//2.实例化一下
onMounted(()=>{
  store.count++ //修改store的值
})

</script>

可能有人想问 能不能不用store.count呢 可不可以直接解构赋值。答案是可以的

但是不能直接解构赋值 不然会失去数据的响应性的 我们应该使用pinia提供的 storeToRefs 函数来进行解构

<script setup lang="ts">
import defaultStore from "./../../store";
import { storeToRefs } from "pinia";
const store = defaultStore()
const { count } = storeToRefs(store)
</script>

5.getters&actions

 和vuex一样 pinia里 getters是用于获取store的数据的 actions是用来操作store的数据的

  

getters:{
getCount(state){
return state.count
}
},
actions:{
setCount(){
this.count++
}
}

与上文中直接 store.count 不同。使用getters获取数据时 你可以在获取到数据前对数据进行一些操作。 例:一个数组或一个对象 你想在获取前剔除掉某些不符合要求的数据之类的。

actions同理。

使用过vuex的朋友一定看出了 pinia 其实很多地方和vuex很相似。有使用过vuex经验的人能够非常轻松的上手这个全新的vue存储库,并且写法上比vuex更加简便快捷 更加的容易理解

6.使用上的拓展

  除了上述的 store.count的直接修改 和 actions以外 官方还提供了其他几种修改数据的方法

//通过$patch 传入对象 可以一次性修改多个数据
store.$patch({
count: store.count + 1,
})
// 传入函数 这个可以让你在修改数据前进行一些其他的操作 类似于一个单独的actions
store.$patch((state) => {
  store.count = store.count + 1
})
// 也可以直接替换掉整个store
store.$state = { name: 'pinia' }
 
 

pinia 入门及使用的更多相关文章

  1. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  2. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  3. Oracle分析函数入门

    一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...

  4. Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数

    上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...

  5. Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数

    上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...

  6. Angular2入门系列教程4-服务

    上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...

  7. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  8. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  9. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

随机推荐

  1. Debouncer防抖代码

    Debouncer类 import java.util.concurrent.*; public class Debouncer { private final ScheduledExecutorSe ...

  2. Elasticsearch高级之-集群搭建,数据分片

    目录 Elasticsearch高级之-集群搭建,数据分片 一 广播方式 二 单播方式 三 选取主节点 四 什么是脑裂 五 错误识别 Elasticsearch高级之-集群搭建,数据分片 es使用两种 ...

  3. 陈胡:Apache SeaTunnel实现 非CDC数据抽取实践

    导读: 随着全球数据量的不断增长,越来越多的业务需要支撑高并发.高可用.可扩展.以及海量的数据存储,在这种情况下,适应各种场景的数据存储技术也不断的产生和发展.与此同时,各种数据库之间的同步与转化的需 ...

  4. Object类和对象类型转换

    学习内容:Object类和对象类型转换 一.Object类 1.Object类是所有类的父类,是Java类层中最高层的类. 2.getClass()方法:返回对象执行时的Class实例,然后用此实例调 ...

  5. 异常——JavaSE基础

    异常 异常的分类 检查性异常 运行时异常:可能被程序员避免的异常,运行时异常可以在编译时被忽略 错误ERROR:错误不是异常 在Java中把异常当作对象来处理,并且定义了一个基类java.lang.T ...

  6. 浅谈Javascript单线程和事件循环

    单线程 Javascript 是单线程的,意味着不会有其他线程来竞争.为什么是单线程呢? 假设 Javascript 是多线程的,有两个线程,分别对同一个元素进行操作: function change ...

  7. 验证cuda和cudnn是否安装成功(转载)

    本人cuda安装目录: 当然cuda安装目录也可默认:此处为方便安装不同cuda版本,所以单独建了文件夹. 转载自:https://zhuanlan.zhihu.com/p/139668028 安装完 ...

  8. ExtJS 布局-Anchor 布局(Anchor layout)

    更新记录: 2022年5月30日 发布本篇 1.说明 anchor布局类似auto布局从上到下进行堆叠,但不同的是其可以指定每个元素相对于容器大小的比例. 当调整父容器大小,容器根据指定的规则调整所有 ...

  9. Jmeter(五十四) - 从入门到精通高级篇 - 如何在linux系统下运行jmeter脚本 - 上篇(详解教程)

    1.简介 上一篇宏哥已经介绍了如何在Linux系统中安装Jmeter,想必各位小伙伴都已经在Linux服务器或者虚拟机上已经实践并且都已经成功安装好了,那么今天宏哥就来介绍一下如何在Linux系统下运 ...

  10. 3.C++逐行读取txt文件数据,利用getline -windows编程

      引言:今天学会了getline的用法,顺手编写一个逐行读取txt文件的程序.关于getline的用法可以看我之前的博客:2.C++标准库函数:getline函数 定界流输入截取函数 -zobol的 ...