详细分析Vuex中的mapGetters

news2024/10/12 14:23:50

目录

  • 1. 基本知识
  • 2. Demo1
  • 3. Demo2

1. 基本知识

优势和用途

  • 简化代码:用 mapGetters 和 mapState,可以简化组件中对于 Vuex 中状态和 getter 的映射工作,减少了重复的代码书写
  • 更易读:组件中直接使用映射的计算属性,使得代码更加清晰易懂,组件的状态管理部分与视图逻辑分离
  • 组件复用:计算属性的定义是在组件中,因此可以轻松地将组件复用到不同的场景中,而不必担心状态和 getter 的映射工作

mapGetters 是 Vuex 提供的辅助函数,用于将 store 中的 getters 映射到组件的计算属性中。它接收一个数组或对象作为参数,返回一个对象,对象的键是映射到组件中的计算属性名,值是相应的 getter 函数名或者对象

数组:

import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapGetters([
      'getterName1',
      'getterName2'
    ])
  }
}

对象:

import { mapGetters } from 'vuex'

export default {
  computed: {
    ...mapGetters({
      aliasName1: 'getterName1',
      aliasName2: 'getterName2'
    })
  }
}

mapState 也是 Vuex 提供的辅助函数,同理

import { mapState } from 'vuex'

export default {
  computed: {
    ...mapState([
      'stateName1',
      'stateName2'
    ])
  }
}

以及

import { mapState } from 'vuex'

export default {
  computed: {
    ...mapState({
      aliasName1: state => state.moduleName.stateName1,
      aliasName2: 'stateName2'
    })
  }
}

2. Demo1

整体的基本知识可能过于抽象

通过实战的整体逻辑,可能会有感触

mapState 和 mapGetters 是 Vuex 提供的辅助函数,用于在 Vue 组件中映射 Vuex 中的状态和 getter 到组件的计算属性中

  1. 在 Vuex 中定义了一些状态(state)、getter 和 mutations,这些定义分别放在了 common.js、getters.js 和 logs.js 等文件中

  2. 在 index.js 中创建了 Vuex 的 Store,将这些模块注册到了 Store 中,并导出了这个 Store

  3. 有一个 Vue 组件,需要用到 common 模块中的状态和 getters.js 中的 getter

第三步骤的代码如下:

在index中引入,创建了 Vuex 的 Store

import Vue from 'vue'
import Vuex from 'vuex'
import user from './modules/user'
import common from './modules/common'
import tags from './modules/tags'
import logs from './modules/logs'
import dict from './modules/dict'
import getters from './getters'

Vue.use(Vuex)
const store = new Vuex.Store({
  modules: {
    user,
    common,
    logs,
    tags,
    dict
  },
  getters,
})

export default store

截图如下:
在这里插入图片描述
在getters文件中引入需要导出的变量

const getters = {
  logsList: state => state.logs.logsList,
  logsLen: state => state.logs.logsList.length || 0,
}
export default getters

对应的logs.js文件引入相关内容:

import {setStore, getStore} from '@/util/store'
import {dateFormat} from '@/util/date'
import {sendLogs} from '@/api/user'

const logs = {
  state: {
    logsList: getStore({name: 'logsList'}) || [],
  },
  actions: {
    SendLogs({state, commit}) {
      return new Promise((resolve, reject) => {
        sendLogs(state.logsList).then(() => {
          commit('CLEAR_LOGS');
          resolve();
        }).catch(error => {
          reject(error)
        })
      })
    },
  },
  mutations: {
    ADD_LOGS: (state, {type, message, stack, info}) => {
      state.logsList.push(Object.assign({
        url: window.location.href,
        time: dateFormat(new Date())
      }, {
        type,
        message,
        stack,
        info: info.toString()
      }))
      setStore({name: 'logsList', content: state.logsList})
    },
    CLEAR_LOGS: (state) => {
      state.logsList = [];
      setStore({name: 'logsList', content: state.logsList})
    }
  }

};

export default logs;

如果后续需要使用到

具体如下:

computed: {
    ...mapGetters(['logsList']),
 
 
使用方法fun() {
   this.logsList
}

3. Demo2

对于上述的逻辑比较清晰了,再给出另外一个Demo

getters文件

const getters = {
  userInfo: state => state.user.userInfo,
}
export default getters

对应user.js文件中含有丰富的方法:

在这里插入图片描述

如果后续需要使用,具体Demo如下(假设template中有使用到userInfo的信息):

<template slot="menuLeft">
    <el-button size="small"
               icon="el-icon-setting"
               @click="handleRole"
               v-if="userInfo.role_name.includes('admin')"
               plain>权限设置
    </el-button>
</template>

具体js如下:

computed: {
  ...mapGetters(["userInfo", "permission"]),
  permissionList() {
    return {
      addBtn: this.vaildData(this.permission.role_add, false),
      viewBtn: this.vaildData(this.permission.role_view, false),
      delBtn: this.vaildData(this.permission.role_delete, false),
      editBtn: this.vaildData(this.permission.role_edit, false)
    };
  }
},

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

项目5-验证码案例

选择使用Google的开源项目Kaptcha来实现. 1.Kaptcha 插件介绍 Kaptcha 是Google的⼀个高度可配置的实⽤验证码⽣成⼯具. 代码: http://code.google.com/p/kaptcha/ ⽹上有很多⼈甚⾄公司基于Google的kaptcha进⾏了⼆次开发. 我们选择⼀个直接适配SpringBoot的 开源项目 htt…

吴恩达:AI 智能体的四种模式

一、背景 吴恩达在《What’s next for AI agentic workflows ft》分享中提出 AI 智能体的四种模式。 反思&#xff08;Reflection&#xff09;&#xff1a; LLM 检查自己的工作&#xff0c;以提出改进方法。 使用工具&#xff08;Tool use&#xff09;&#xff1a;LLM 拥有…

MySQL数据库 数据库基本操作(二):表的增删查改(上)

1. CRUD CRUD 即增加(Create)、查询(Retrieve)、更新(Update)、删除(Delete)四个单词的首字母缩写,就是数据库基本操作中针对表的一系列操作. 2. 新增(create) -->insert 语法: insert into 表名 [列名1,列名2…] values (val1,val2…) [注意] 列名可以没有,如果没有列名…

【深度学习|Pytorch】torchvision.datasets.ImageFolder详解

ImageFolder详解 1、数据准备2、ImageFolder类的定义transforms.ToTensor()解析 3、ImageFolder返回对象 1、数据准备 创建一个文件夹&#xff0c;比如叫dataset&#xff0c;将cat和dog文件夹都放在dataset文件夹路径下&#xff1a; 2、ImageFolder类的定义 class ImageFol…

大日志精选案例四:某省级大数据集团日志审计优化实战解析

“在集团日常运营中&#xff0c;数据安全始终是我们关注的重点。过去&#xff0c;数据量大、处理速度慢&#xff0c;导致日志数据难以迅速获取和分析&#xff0c;影响业务决策。但自从引入聚铭大日志解决方案后&#xff0c;系统日志和用户行为数据都得到了高效处理与存储。该方…

SpringCloud Hystrix 服务熔断、服务降级防止服务雪崩

文章目录 SpringCloud Hystrix 熔断器、服务降级防止服务雪崩需求背景引入依赖启动类加Hystrix注解接口配置熔断常规配置超时断开错误率熔断请求数熔断限流 可配置项HystrixCommand.Setter参数Command Properties 服务降级 SpringCloud Hystrix 熔断器、服务降级防止服务雪崩 H…

网络安全基础之网络协议与安全威胁

OSI(OpenSystem Interconnect)&#xff0c;即开放式系统互联。 一般都叫OSI参考模型&#xff0c;是ISO(国际标准化组织)组织在1985年研究的网络互联模型。 网络协议的简介&#xff1a; 定义&#xff1a;协议是网络中计算机或设备之间进行通信的一系列规则集合。 什么是规则?…

迅饶科技 X2Modbus 网关 GetUser 信息泄露漏洞复现

0x01 产品简介 X2Modbus是上海迅饶自动化科技有限公司Q开发的一款功能很强大的协议转换网关, 这里的X代表各家不同的通信协议, 2是T0的谐音表示转换, Modbus就是最终支持的标准协议是Modbus协议。用户可以根据现场设备的通信协议进行配置,转成标准的Modbus协议。在PC端仿真…

【考研数学】1800基础做完了,如何无缝衔接660和880❓

基础题做完&#xff0c;不要急着强化 首先做一个复盘&#xff0c;1800基础的正确率如何&#xff0c;如果70%以下的话&#xff0c;从错题入手&#xff0c;把掌握不扎实的地方再进行巩固&#xff0c;否则接下来做题的话效率会很低。 接下来考虑习题衔接的问题。 关于线代复习的…

(免费分享)基于微信小程序自助停取车收费系统

本项目的开发和制作主要采用Java语言编写&#xff0c;SpringBoot作为项目的后端开发框架&#xff0c;vue作为前端的快速开发框架&#xff0c;主要基于ES5的语法&#xff0c;客户端采用微信小程序作为开发。Mysql8.0作为数据库的持久化存储。 获取完整源码&#xff1a; 大家点赞…

mac | Windows 本地部署 Seata2.0.0,Nacos 作为配置中心、注册中心,MySQL 存储信息

1、本人环境介绍 系统 macOS sonama 14.1.1 MySQL 8.2.0 &#xff08;官方默认是5.7版本&#xff09; Seata 2.0.0 Nacos 2.2.3 2、下载&数据库初始化 默认你已经有 Nacos、MySQL&#xff0c;如果没有 Nacos 请参考我的文章 &#xff1a; Docker 部署 Nacos&#xff08;单机…

基于51单片机和MAX1898的智能手机充电器设计

**单片机设计介绍&#xff0c;基于51单片机和MAX1898的智能手机充电器设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机和MAX1898的智能手机充电器设计概要 一、引言 随着智能手机的普及&#xff0c;其电池续航…

人工智能会拥有反思能力吗?

一、背景 人工智能是否能拥有真正的反思能力&#xff0c;目前仍在探索和发展之中。虽然现有的AI系统可以在一定程度上进行自我学习、自我调整和优化&#xff0c;但是它们的“反思”还远未达到人类意义上的深度和全面性。 传统的人工智能系统依赖于预设的算法和模型&#xff0c…

如何把png格式的图片转换成ico格式的图标

前言 前段时间有朋友说想要把某个图标做成图标&#xff0c;用来更改某个程序或者软件的图标&#xff0c;以求个性化&#xff01; 但是下载下来的.png图片直接更改文件扩展名为.ico之后&#xff0c;并不能正常使用。这时候就需要有工具把.png格式转换为.ico格式。 文件更换格式…

Python Django全文搜索库之django-haystack使用详解

概要 Django Haystack库是一个用于在Django项目中实现全文搜索功能的强大工具。它集成了各种搜索引擎,如Elasticsearch、Whoosh等,为开发者提供了灵活且高效的搜索解决方案。在本文中,将深入探讨Django Haystack库的安装、配置和应用,以及如何利用其丰富的功能来实现高级全…

【问题处理】银河麒麟操作系统实例分享,理光打印机lpr协议打印问题处理

1.问题环境 系统版本&#xff1a;Kylin-Desktop-V10-SP1-General-Release-xxx-20221120-x86_64 内核版本&#xff1a;linux 5.4.18-44kt-generic 系统版本&#xff1a;麒麟v10 sp1 处理器&#xff1a;kx6640ma 2.问题描述 问题详细描述&#xff1a;用户通过lpr协议去连接…

《信息技术服务 智能运维 第2部分:数据治理》国家标准2024年第一次线下编写会议成功召开

2024年3月13日~15日&#xff0c;由运维数据治理国标编制组主办的运维数据治理国家标准2024年第一次编写工作会议在上海成功召开。 本次会议由云智慧&#xff08;北京&#xff09;科技有限公司承办&#xff0c;来自南网数字集团信通公司、太保科技、平安银行、广发银行、广东农…

Savitzky-Golay 滤波与Kalman滤波对比

分别使用SG滤波和Kalman滤波对比了平滑RTK解算的1s基线变化高斯坐标系XYH如下图&#xff1a; 从红框可以看出&#xff0c;SG滤波一定程度反应了波动情况&#xff0c;kalman滤波没有反映出来&#xff08;PS&#xff1a;当然也可能和我设置参数有关&#xff0c;大家可以尝试&…

说一说Redis的Bitmaps和HyperLoLog?

本篇内容对应 “Redis高级数据类型”小节 和 “7.5 网站数据统计”小节 对应视频&#xff1a; Redis高级数据结构 网站数据统计 1 什么是UV和DAU&#xff1f; DAUUV英文全称Daily Active UserUnique Visotr中文全称日活跃用户量独立访客如何统计数据通过用户ID排重统计数据通…

uniapp自定义卡片轮播图

效果图 1、封装组件 <template><view><!-- 自定义卡片轮播 --><swiper class"swiperBox" :previous-margin"swiper.margin" :next-marginswiper.margin :circular"true"change"swiperChange"><swiper-ite…