自上月从上海结束工作回来 在家闲来无事 想写点东西打发时间 也顺便学习学习新的技术。偶然发现了 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. Spring Ioc源码分析系列--Ioc的基础知识准备

    Spring Ioc源码分析系列--Ioc的基础知识准备 本系列文章代码基于Spring Framework 5.2.x Ioc的概念 在Spring里,Ioc的定义为The IoC Containe ...

  2. Blazor和Vue对比学习(基础1.6):祖孙传值,联级和注入

    前面章节,我们实现了父子组件之间的数据传递.大多数时候,我们以组件形式来构建页面的区块,会涉及到组件嵌套的问题,一层套一层.这种情况,很大概率需要将祖先的数据,传递给子孙后代去使用.我们当然可以使用父 ...

  3. idea maven 依赖还原不上的问题 method <init>()V not found

    问题 还原项目依赖的时候报错: java.lang.RuntimeException: org.codehaus.plexus.component.repository.exception.Compo ...

  4. 好客租房23-react组件的两种创建方式(抽离为独立js)

    2.3抽离为单独组件 组件作为一个单独的个体,一般把每个组件放在单独的js中文件中 1创建hello.js 2在hello.js中导入React 3创建组件(函数或者类) hello.js子组件 // ...

  5. 使用argparse进行调参

    argparse是深度学习项目调参时常用的python标准库,使用argparse后,我们在命令行输入的参数就可以以这种形式python filename.py --lr 1e-4 --batch_s ...

  6. 12.MYSQL基础-常见函数

    4. 常见函数 一.字符函数 概念 类似于Java的方法,将一组逻辑语句封装在方法中,对外暴露方法名 优点 隐藏了实现细节 提高代码的重用性 调用 select 函数名(实参列表) [ from 表] ...

  7. MTK 虚拟 sensor bring up (pick up) sensor2.0

    pick up bring up sensor2.0 1.SCP侧的配置 (1) 放置驱动pickup.c (2) 添加底层驱动文件编译开关 (3) 加入编译文件 (4) 增加数据上报方式 (5)修改 ...

  8. 使用docker搭建jupyter notebook / jupyterlab

    说明 由于官方镜像实在是不怎么好用,所以我自己做了一个优化过的jupyter notebook的镜像 notebook_hub,使用我这个镜像搭建容器非常简单,下面就基于这个notebook_hub来 ...

  9. 【原创】快速理解Unicode和utf-8的本质

    字符串编码 基本概念 在代码中处理,为了字节统一,都统一使用Unicode 核心:在pyhton中s.encode("utf-8")中的变量实例s必须是已经是Unicode格式,否 ...

  10. 『忘了再学』Shell基础 — 28、AWK中条件表达式说明

    目录 1.AWK的条件表达 2.条件表达式说明 (1)BEGIN (2)END (3)关系运算符 (4)说明AWK中条件表达式的执行过程 (5)AWK中使用正则表达式 (6)A~B练习 1.AWK的条 ...