数据仓库pinia中,getter和actions有什么区别

embedded/2025/3/31 4:03:56/

将计算逻辑放在 getters 还是 actions 里,取决于具体的使用场景和需求,下面详细分析放在 getters 中的优势以及和 actions 的区别,以说明是否有必要放在 getters 里:

1. getters 的优势

缓存特性

getters 具有类似 Vue 计算属性的缓存机制。只有当它依赖的状态发生变化时,才会重新计算结果。例如在之前的 sum 计算中,只要 state.numbers 数组不改变,sum 就不会重新计算,直接返回之前缓存的结果。

javascript">import { defineStore } from 'pinia';export const useMyStore = defineStore('myStore', {state: () => ({numbers: [1, 2, 3]}),getters: {sum: (state) => state.numbers.reduce((acc, num) => acc + num, 0)}
});

在组件中多次访问 store.sum 时,如果 numbers 数组没有变化,就不会重复执行 reduce 计算,提高了性能。

数据派生与展示

getters 主要用于从现有的状态中派生出新的数据,适合用于数据展示相关的计算。在组件里,getters 可以像普通状态一样被使用,方便在模板中展示计算结果。

<template><div><p>Sum: {{ sumValue }}</p></div>
</template><script setup>
import { useMyStore } from '../stores/myStore';
import { storeToRefs } from 'pinia';const store = useMyStore();
const { sum: sumValue } = storeToRefs(store);
</script>

代码复用与可维护性

将计算逻辑封装在 getters 中,使得代码更具复用性和可维护性。如果多个组件都需要用到 sum 的计算结果,只需要在 getters 中定义一次,各个组件都可以直接使用。当 numbers 数组的计算逻辑发生变化时,只需要修改 getters 中的 sum 方法即可。

2. actions 的特点

actions 通常用于处理异步操作或者修改 store 中的状态。它可以包含复杂的业务逻辑,比如发起网络请求、处理用户输入等。与 getters 不同,actions 不具备缓存特性,每次调用都会执行其中的代码。

javascript">import { defineStore } from 'pinia';export const useMyStore = defineStore('myStore', {state: () => ({numbers: [1, 2, 3]}),actions: {calculateSum() {return this.numbers.reduce((acc, num) => acc + num, 0);}}
});
<template><div><p>Sum: {{ sumValue }}</p></div>
</template><script setup>
import { useMyStore } from '../stores/myStore';const store = useMyStore();
const sumValue = store.calculateSum();
</script>

在这个例子中,每次调用 store.calculateSum() 都会重新执行 reduce 计算,没有缓存机制。

总结

如果计算逻辑只是简单地从现有的状态中派生出新的数据,并且希望利用缓存机制提高性能,方便在组件中展示计算结果,那么将其放在 getters 中是合适的。而如果计算逻辑涉及到异步操作、修改状态或者复杂的业务逻辑,那么应该放在 actions 中。


http://www.ppmy.cn/embedded/177347.html

相关文章

5G核心网(5GC)中5QI(5G QoS Identifier)

在5G核心网&#xff08;5GC&#xff09;中&#xff0c;**5QI&#xff08;5G QoS Identifier&#xff09;**是用于标识5G网络中不同服务质量&#xff08;QoS&#xff09;特性的关键参数。5QI通过定义一组QoS特性&#xff0c;帮助网络为不同的业务流分配资源并提供相应的服务质量…

java八股文之JVM

1.什么是程序计数器 程序计数器是 JVM 管理线程执行的“定位器”&#xff0c;记录每个线程当前执行的指令位置&#xff0c;确保程序流程的连续性和线程切换的准确性。线程私有的&#xff0c;每个线程一份&#xff0c;内部保存的字节码的行号。用于记录正在执行的字节码指令的地…

【解决】:VSCode 中识别不到电脑中的已安装的 Git

# 问题 自己电脑中明明已经安装了 git &#xff0c;但在 vscode 中确识别不到。——————————&#xff08;问题一样就看下去&#xff0c;不一样早早润。省流&#xff01;&#xff01;&#xff01;&#xff01;&#x1f680;&#xff09; # 【第一步】首先要确认你电脑中…

CentOS 7 离线升级 OpenSSH

CentOS 7 离线升级 OpenSSH 在 CentOS 7 系统中进行 OpenSSH 9.9b2 版本的离线安装&#xff0c;需先在能联网的环境下下载所需的依赖包和 OpenSSH 源码包&#xff0c;再将这些文件传输到离线的 CentOS 7 系统中进行安装。 一、所需依赖 zlib-devel-1.2.7-21.el7_9.x86_64&am…

RabbitMQ 学习整理1 - 基础使用

项目代码&#xff1a;RabbitMQDemo: 学习RabbitMQ的一些整理 基本概念 RabbitMQ是一种基于AMQP协议的消息队列实现框架RabbitMQ可以用于在系统与系统之间或者微服务节点之间&#xff0c;进行消息缓存&#xff0c;消息广播&#xff0c;消息分配以及限流消峰处理RabbitMQ-Serve…

Vue中使用JsonView进行JSON数据展示

前言 最近在开发公司的管理系统的操作日志模块&#xff0c;要查看某条操作日志的请求参数&#xff0c;要将请求的参数以 JSON 格式的形式展示出来&#xff0c;于是用到了Vue-JSON-Viewer 这个插件。 一、Vue-JSON-Viewer 基础入门 插件简介 Vue-JSON-Viewer 是一个用于在Vue项…

Vue3 其它API readonly和shallowreadonly

Vue3 其它API readonly和shallowreadonly readonly&#xff0c;只读&#xff0c;a是可以修改值的&#xff0c;a1不能shallowreadonly&#xff0c;浅层次只读&#xff0c;b中所有属性的值是可以修改&#xff0c;b1中name不能修改&#xff0c;其它可以修改 let a ref(123); le…

SRT协议

SRT&#xff08;Secure Reliable Transport&#xff09;是一种开源的视频传输协议&#xff0c;专为高丢包、高延迟网络环境设计&#xff0c;结合了UDP的低延迟和TCP的可靠性&#xff0c;广泛应用于直播、远程制作、视频会议等场景。 定位&#xff1a;SRT协议的官方C/C实现库&am…