什么时候考虑使用全局状态管理?vue获取全局状态变量一共有三种方法,你真的理解吗?

同学们可以私信我加入学习群!


正文开始

  • 前言
  • 一、场景
  • 二、设置state中的变量
  • 三、直接访问state中的变量
  • 四、通过getters访问变量
  • 五、通过actions访问变量
  • 六、总结
  • 总结


前言

本文给大家做个参考,什么时候会考虑使用全局状态管理?以及帮助大家理解获取全局状态变量的三种方式。

在使用vue的全局状态管理工具pinia时,很多小伙伴可能都会有个疑问,那就是我们从全局状态管理中获取某个变量的值,一共有三个方法:

1.直接访问state中的变量

2.通过getters访问变量

3.通过actions中的方法访问

这三个方法有何区别,它们是不是有些冗余,究竟什么时候用哪个方式。本文通过简单的几分钟,教会大家这个基础知识点。


一、场景

最近的项目,我有一个组件(主要是jar包)管理的需求,如图:
在这里插入图片描述

参数配置功能需要对组件的配置文件(主要是.properties)进行修改、创建项、保存、导入导出等一些列操作:在这里插入图片描述
每个配置页面布局是一样的,渲染逻辑也是一样的,所以肯定是写一个vue页面,给页面传递不同的数据,最终实现效果。

最初,通过props传递组件数据进来,已经很好地实现初步效果。但是当迭代后,配置功能变复杂,需要判断每个表单项的格式,需要把两个组件的配置文件合并到一个页面显示……

最终这个配置页面又被拆分,从一个单独的vue页面,变成不止一层的父子页面,再通过祖父级的props来传递参数,并且实现两个配置页面的数据合并到一个页面显示,两个页面间参数还会有联动,就会很麻烦。

最终需要改造成状态管理工具来管理父子间、兄弟间共享的数据。

二、设置state中的变量

这个状态管理的简易代码如下:

/**
 * 组件配置页*/

import {defineStore} from 'pinia'

export const useSettingItemStore = defineStore('settingItem', {
    state:()=>{
        tabItem:{}
    },
    getters:{
        getTabItem(){
            debugger
            return this.tabItem
        }
    },
    actions:{
        setTabItem(v){
            this.tabItem=v
        },
        getTabItemHandle(){
            debugger
            return this.tabItem
        }
    }
})

每次点击参数配置按钮,进入配置页时,我都会调用setTabItem方法,修改tabItem的数据,在配置页面渲染。

三、直接访问state中的变量

import {useSettingItemStore} from 'module-install/store/settingItem'
const {tabItem}=useSettingItemStore()
console.log(tabItem)

最终效果:tabItem是我们需要的数据。

四、通过getters访问变量

import {useSettingItemStore} from 'module-install/store/settingItem'
const {getTabItem}=useSettingItemStore()
console.log(getTabItem)

最终效果:tabItem不是我们需要的数据。

五、通过actions访问变量

import {useSettingItemStore} from 'module-install/store/settingItem'
const {getTabItemHandle}=useSettingItemStore()
console.log(getTabItemHandle())

最终效果:tabItem是我们需要的数据。

六、总结

1.对比最终效果,我们可以知道,通过getters方式访问的数据只有在第一次调用时会计算返回值,计算一次后,就会把getTabItem的值缓存起来,以后再改变tabItem变量,getTabItem的值也不会改变。

2.getters缓存结果的方式有利于性能,但不适用于每次都需要计算新值的场景。第一次调用指,第一次使用 const {getTabItem}=useSettingItemStore()获取getTabItem的时候。getters也有返回函数来应对重新计算的场景,但是非必要别用。那个函数不是用来解决缓存问题的。

3.使用getters和actions获取变量的好处是,因为有方法体的存在,可以根据维护的变量,定制输出值。

4.当每次都需要改变状态值,并重新计算输出,可以直接访问state中的变量或者通过actions访问,如果使用频率过高,推荐使用actions,因为在state变量和应用场景之间封装一层,有利于拓展性增强,也有利于webstorm跳转引用。


总结

获取资源,或者联系我,都可以通过下面入口:

https://lizetoolbox.top:8080/qrCode_contact

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/528739.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue+springboot实现JWT登录验证

目录 前言概念实际演示路由信息初始访问登录界面登录验证验证过期 vue实现依赖引入main.js获取和设置token工具类登录方法实体登录方法axios请求 router配置 springboot实现依赖引入JWT工具类忽视jwt验证注解拦截器逻辑跨域&调用拦截器配置登录接口&验证token接口 结语…

初识SpringMVC

一、什么是MVC MVC是一种软件架构模式(是一种软件架构设计思想,不止Java开发中用到,其它语言也需要用到),它将应用分为三块: M:Model(模型)V:View&#xff08…

自定义类型:结构体,位端

结构体内存对齐 结构体的对齐规则: 1. 第一个成员在与结构体变量偏移量为0的地址处。 2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8 Linux中没有默…

【Shell】各种条件语句的使用——test语句、if语句、case语句

Shell条件语句的使用 条件语句 Shell条件语句的使用条件测试的语法字符串测试表达式整数二元比较操作符逻辑操作符 if的条件语句的语法if的嵌套case语句语法 条件测试的语法 语法1&#xff1a;test <测试表达式> 利用test命令进行条件测试表达式的方法。test命令与<测…

外包干了25天,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入杭州某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

深入浅出 -- 系统架构之微服务标准组件及职责

我们来认识一下微服务架构在Java体系中依托哪些组件实现的。 相对于单体架构的简单粗暴&#xff0c;微服务的核心是将应用打散&#xff0c;形成多个独立提供的微服务&#xff0c;虽然从管理与逻辑上更符合业务需要。但微服务架构也带来了很多急需解决的核心问题&#xff1a; 1…

从“危”到“机”:HubSpot如何助企业转化出海营销CRM风险?

在全球化的大背景下&#xff0c;越来越多的企业选择出海拓展业务&#xff0c;以寻求更大的发展空间。然而&#xff0c;随着市场的扩大&#xff0c;企业在出海营销过程中也面临着各种风险。为了有效规避这些风险&#xff0c;许多企业选择借助HubSpot这样的专业营销软件。今天运营…

软文写作技巧,媒介盒子揭秘

数字化时代,想要获取用户的注意力难上加难&#xff0c;只有紧跟互联网的创作节奏&#xff0c;在软文写作中,根据用户的浏览偏好进行适当调整,让软文具有更高的审美性、易读性和启示性,才能有效地吸引当下受众的注意力。今天媒介盒子就来和大家聊聊软文写作技巧。 一、文章选题 …

C语言之自定义类型联合和枚举

目录 前言 一&#xff1a;联合体&#xff08;共用体&#xff09;union 1.联合体类型的声明 2.联合体的特点 3.联合体大小的计算 4.联合体判断机器的大小端 二&#xff1a;枚举enum 1.概念 2.枚举的优点 3.枚举的使用 接下来的日子会顺顺利利&#xff0c;万事胜意…

深度学习500问——Chapter06: 循环神经网络(RNN)(2)

文章目录 6.4 CNN和RNN的区别 6.5 RNNs与FNNs有什么区别 6.6 RNNs训练和传统ANN训练异同点 6.7 为什么RNN训练的时候Loss波动很大 6.8 标准RNN前向输出流程 6.9 BPTT算法推导 6.9 RNN中为什么会出现梯度消失 6.10 如何解决RNN中的梯度消失问题 6.4 CNN和RNN的区别 类别特点描述…

2014最新AIGC创作系统ChatGPT网站源码+AI绘画网站源码+GPT4-All联网搜索模型

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

【超简单】基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?亲们,你们要写会议纪要嘛?当您面对成吨的会议录音,着急写会议纪要而不得不愚公移山、人海战术?听的头晕眼花,听的漏洞百出,听的怀疑人生,那么你…

电脑网卡无法连接网络?三招教你解决问题

在现代生活中&#xff0c;电脑网卡扮演着连接互联网的关键角色。无论是有线网卡还是无线网卡&#xff0c;都是电脑与外部网络通信的重要途径。然而&#xff0c;有时候我们可能会遇到电脑网卡无法连接网络的问题&#xff0c;这会严重影响我们的工作和娱乐。本文将介绍三种常见的…

【Qt】文件与音视频

目录 一、输入输出设备类 二、文件读写类 三、文件和目录信息类 四、音视频 4.1 音频 4.2 视频 文件操作是应用程序必不可少的部分。Qt作为一个通用开发库&#xff0c;提供了跨平台的文件操作能力。Qt提供了很多关于文件的类&#xff0c;通过这些类能够对文件系统进行操作…

用Python实现输入点云索引绘制该点云法向量

import open3d as o3d# 读取pcd文件 pcd o3d.io.read_point_cloud(r"D:\PythonProjects\Codes\paper_images\back_point\voxel.pcd")# 计算法向量 pcd.estimate_normals(search_paramo3d.geometry.KDTreeSearchParamHybrid(radius0.1, max_nn30))# 选择要绘制法向量…

四级作文模板——议论文——现象解释

议论文类型 现象解释 第一句 with the rapid development of society / economy / education / technology / culture / medical / service(任选) , it is of great necessity for youngster / students to improve our speaking ability.随着社会/经济/教育/科技/文化/医疗…

腾讯、阿里、字节….等大厂都更喜欢什么样的简历?

我985毕业&#xff0c;为什么筛选简历时输给了一个普通一本&#xff1f; 我投了20份简历&#xff0c;为什么没有一个大厂回我&#xff1f; 每次HR收到简历就没下文了&#xff0c;是我的简历有问题吗&#xff1f; 诚然&#xff0c;在求职时&#xff0c;简历往往就是我们给予H…

AI爆款文案 巧用AI大模型让文案变现插上翅膀

&#x1f482; 个人网站:【 摸鱼游戏】【神级代码资源网站】【工具大全】&#x1f91f; 一站式轻松构建小程序、Web网站、移动应用&#xff1a;&#x1f449;注册地址&#x1f91f; 基于Web端打造的&#xff1a;&#x1f449;轻量化工具创作平台&#x1f485; 想寻找共同学习交…

【C++】 详解 lower_bound 和 upper_bound 函数(看不懂来捶我!!!)

目录 一、前言 二、函数详解 &#x1f95d; lower_bound &#x1f34d;upper_bound 三、常考面试题 四、共勉 一、前言 这两个函数是我在 LeetCode 上做题见到&#xff0c;看到不熟悉的函数 lower_bound 和 upper_bound让我感觉很难受&#xff0c;于是在 C 官网去学习&…