pinia 入门及使用
自上月从上海结束工作回来 在家闲来无事 想写点东西打发时间 也顺便学习学习新的技术。偶然发现了 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,
})
// 传入函数 这个可以让你在修改数据前进行一些其他的操作 类似于一个单独的actionsstore.$patch((state) => {
store.count = store.count + 1
})
// 也可以直接替换掉整个storestore.$state = { name: 'pinia' }
pinia 入门及使用的更多相关文章
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- Oracle分析函数入门
一.Oracle分析函数入门 分析函数是什么?分析函数是Oracle专门用于解决复杂报表统计需求的功能强大的函数,它可以在数据中进行分组然后计算基于组的某种统计值,并且每一组的每一行都可以返回一个统计 ...
- Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数
上一篇:Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数 之前介绍了简单的路由以及传参,这篇文章我们将要学习复杂一些的路由以及传递其他附加参数.一个好的路由系统可以使我们 ...
- Angular2入门系列教程5-路由(一)-使用简单的路由并在在路由中传递参数
上一篇:Angular2入门系列教程-服务 上一篇文章我们将Angular2的数据服务分离出来,学习了Angular2的依赖注入,这篇文章我们将要学习Angualr2的路由 为了编写样式方便,我们这篇 ...
- Angular2入门系列教程4-服务
上一篇文章 Angular2入门系列教程-多个组件,主从关系 在编程中,我们通常会将数据提供单独分离出来,以免在编写程序的过程中反复复制粘贴数据请求的代码 Angular2中提供了依赖注入的概念,使得 ...
- wepack+sass+vue 入门教程(三)
十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...
- wepack+sass+vue 入门教程(二)
六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...
- wepack+sass+vue 入门教程(一)
一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...
随机推荐
- Ansible的参数介绍
安装完成ansible后查看ansible的参数:ansible -h ansible 命令格式:Usage: ansible <host-pattern> [options] ansib ...
- Golang:手撸一个支持六种级别的日志库
Golang标准日志库提供的日志输出方法有Print.Fatal.Panic等,没有常见的Debug.Info.Error等日志级别,用起来不太顺手.这篇文章就来手撸一个自己的日志库,可以记录不同级别 ...
- 揭秘华为云GaussDB(for Influx):数据直方图
摘要:本文带您了解直方图在不同产品中的实现,以及GaussDB(for Influx)中直方图的使用方法. 本文分享自华为云社区<华为云GaussDB(for Influx)揭秘第九期:最佳实践 ...
- 【多线程】JUC版的CopyOnWriteArrayList
CopyOnWriteArrayList CopyOnWriteArrayList适合于多线程场景下使用,其采用读写分离的思想,读操作不上锁,写操作上锁,且写操作效率较低. CopyOnWriteAr ...
- Spring-Batch处理MySQL数据后存到CSV文件
1 介绍 用Spring Batch实现了个简单的需求,从MySQL中读取用户表数据,根据生日计算年龄,将结果输出到csv文件. 1.1 准备表及数据 user test; DROP TABLE IF ...
- python操作MySQL与MySQL补充
目录 python操作MySQL 基本使用 SQL注入问题 二次确认 视图 触发器 事务 存储过程 函数 流程控制 索引 练习 python操作MySQL python中支持操作MySQL的模块很多, ...
- 源码解读etcd heartbeat,election timeout之间的拉锯
转一个我在知乎上回答的有关raft election timeout/ heartbeat interval 的回答吧. 答:准确来讲: election是timeout,而heartbeat 是in ...
- 利用 Onekey Theater 改善屏幕显示效果
介绍 Onekey Theater(一键影音),它是联想笔记本带的一键影音功能,使用它能够更改笔记本的显示效果和音效,以此模仿电影院的效果,为用户带来更好是视听效果及享受. 作用 之前的联想笔记本自带 ...
- 使用 vim 快速对当前文件夹下的文件批量重命名
前言 我们在使用 Linux 的时候,有很多种方法可以对文件进行重命名,例如 命令行 下的 mv 命令,或者是使用像 dolphin 这样的图形文件管理器.但是有时候需要对一个文件夹下的所有文件批量重 ...
- 『忘了再学』Shell基础 — 26、cut列提取命令
目录 1.cut命令说明 2.cut命令练习 (1)cut命令基本用法 (2)cut命令选取多列 (3)按字符来进行提取 (4)按指定分隔符进行截取数据 3.cut命令分隔符说明 1.cut命令说明 ...