首页 > 其他分享 >Vue中Pinia简介

Vue中Pinia简介

时间:2023-11-16 10:46:30浏览次数:36  
标签:count Vue 函数 简介 pinia state Pinia action store

Pinia是一个进行vue状态管理的组件,他会创建一个带有state、actions、getters的option对象

const useCounterStore = defineStore('counter', {
  state: () => ({
    count: 0
  }),
  getters: {
    double: (state) => state.count * 2
  },
  actions: {
    increment() {
      this.count++
    }
  }
})
  • state:可以认为是store的数据
  • getters:是store的计算属性
  • actions:是store中使用的方法
    还有一种是setup箭头函数的方式来定义一个store的
const useCounterStore = defineStore('count', () => {
  const count = ref(0);
  function increment(){
    count.value++
  }
  // 通过返回的方式暴露属性和方法
  return {count, increment}
})

在调用useStore()之前store的实例不会被创建,并且store是一个用reactive包装的对象,所以不需要在使用的时候在后面添加value
创建store之后可以直接通过store对象调用其中的方法和属性,不需要使用value

const counter = useCounterStore();
counter.increment();

对state的操作

  • $reset()方法: 重置state,会创建一个新的状态对象并替换他当前的状态;在setup函数中用户需要自己来重写$reset()方法;
  • $patch()方法允许用一个state的补丁对象在同一时间更改多个属性;使用$patch不能完全替换掉store中的state,因为那样会破坏他的响应性;
store.$patch(() => {
  state.hasChanged = true;
  state.item.push({new item})
})

注意:可以使用pinia.state.value = {}来设置整个应用的初始state

  • $subscribe():侦听state及其变化,他的好处是比起watch()他只在$patch后触发一次;

getter

getter只是计算属性,不能向他传递参数,但是有一种方法就是让getter直接返回一个函数,这样可以在返回的函数中传入参数获得动态的返回值;
不过如果getter返回的是函数那么将不再被缓存,其返回结果将根据传入的参数而动态改变;

action

  • 通过store.$onAction()可以监听action和他的结果,传递给他的回调函数会在action本身之前执行;
  • action中可以使用异步函数
  • action中可以使用其他的store来获取其他的参数

pinia的扩展

使用插件可以对pinia进行扩展,例如添加一个持久化的插件,让管理登录的pinia的store数据在修改之后在本地进行持久化

标签:count,Vue,函数,简介,pinia,state,Pinia,action,store
From: https://www.cnblogs.com/xxss0903/p/17835689.html

相关文章

  • 如何优雅使用 vuex
    大纲本文内容更多的是讲讲使用vuex的一些心得想法,所以大概会讲述下面这些点:Q1:我为什么会想使用vuex来管理数据状态交互?Q2:使用vuex框架有哪些缺点或者说副作用?Q3:我是如何在项目里使用vuex的?初识vuex对于vuex,有人喜欢,有人反感喜欢的人觉得它可以很好的解决复杂的数......
  • 「软件设计」权威领域驱动设计(DDD)简介
    「软件设计」权威领域驱动设计(DDD)简介今天的企业应用程序无疑是复杂的,并依赖一些专门技术(持久性,AJAX,Web服务等)来完成它们的工作。作为开发人员,我们倾向于关注这些技术细节是可以理解的。但事实是,一个不能解决业务需求的系统对任何人都没有用,无论它看起来多么漂亮或者如何很好地构......
  • QinQ简介
    QinQ(802.1Q-in-802.1Q)技术是一项扩展VLAN空间的技术,通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能。由于报文有两层802.1QTag(一层公网Tag,一层私网Tag),即802.1Q-in-802.1Q,所以称之为QinQ协议。随着以太网技术在运营商网络中的大量部署(即城域以太网),......
  • vue中el-upload结合vuedraggable实现图片的上传、排序、删除以及预览等功能_element u
    <template><div><ulclass="el-upload-listel-upload-list--picture-card"style="display:flex;"><div><!--start:拖拽开始end:拖拽结束imageLists:需要展示图片的数组-->......
  • 【开源】基于Vue.js的高校实验室管理系统
    一、摘要1.1项目介绍基于JAVA+Vue+SpringBoot+MySQL的高校实验室管理系统包含实验室类型模块、实验室档案模块、实验模块、实验设备模块、实验订单模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,高校实验室......
  • 【开源】基于Vue.js的衣物搭配系统的设计和实现
    一、摘要1.1项目介绍基于Vue+SpringBoot+MySQL的衣物搭配系统,包含衣物档案模块、衣物搭配模块、衣物收藏模块,还包含系统自带的用户管理、部门管理、角色管理、菜单管理、日志管理、数据字典管理、文件管理、图表展示等基础模块,衣物搭配管理系统基于角色的访问控制,给普通用户、衣物......
  • 【Vue】组件传值的六种方法
    Vue组件之间的通信大概归类为:父子组件通信:props;ref;$attrs/$listeners;$parent/$children兄弟组件通信:eventBus;vuex跨级通信:eventBus;Vuex;$attrs/$listeners一、props/$emit1.父组件向子组件传值通过props传值。父组件的代码:<template><divclass="secti......
  • vue 实现文件切片上传
    在实际开发项目过程中有时候需要上传比较大的文件,然后呢,上传的时候相对来说就会慢一些,so,后台可能会要求前端进行文件切片上传,很简单哈,就是把比如说1个G的文件流切割成若干个小的文件流,然后分别请求接口传递这个小的文件流。流程简说实现文件切片导入,首先我们使用elementUI也好,......
  • linux Libevent 轻量级事件通知库API简介和示例
    1.事件处理框架libevent是一个C语言编写,轻量级开源高性能事件框架。事件驱动,支持多种IO多路复用(如epoll),支持注册优先级等//头文件#include<event2/event.h>//创建一个事件处理框架structevent_base*event_base_new(void);//销毁一个事件处理框架voidevent_ba......
  • cJSON简介
    CJSON简介官网下载cJSONdownload|SourceForge.netgithubclone地址:https://github.com/yegeli/cJSON.gitgiteeclone地址:https://gitee.com/yegeli/cJSON.git核心内容cJSON旨在成为一个可以应用在工作中的低门槛json解析器。该项目包含一个.c文件,和一个.h文件。对JSO......