Vuex Mutations 正确使用指南:过滤 State 中的数组数据

vuex mutations 正确使用指南:过滤 state 中的数组数据

本文旨在帮助开发者正确理解和使用 Vuex mutations 来处理 state 中的数组数据,尤其是在需要过滤数据时。我们将探讨为什么直接在 mutation 中修改 state 可能不是最佳实践,并介绍如何使用 getters 来更有效地实现数据过滤。同时,我们也会强调代码规范的重要性,以提升代码可读性和维护性。

Vuex Mutations 的正确使用姿势

Vuex 的核心思想之一是单向数据流,强调 state 的不可变性。Mutations 是修改 state 的唯一途径,必须是同步函数。然而,直接在 mutation 中对 state 进行复杂操作,尤其是过滤数组,可能会导致代码难以维护和调试。

考虑以下场景:我们需要根据 trip_class 或 number_of_changes 过滤 flights 数组。

// Storestate: {  flights: [    { trip_class: 0, number_of_change: "1" },    { trip_class: 1, number_of_change: "2" },    { trip_class: 1, number_of_change: "1" }  ]}mutations: {  setFilteredFlights: (state, data) => {    // flight classes    if (...) {      state.flights.filter(        (flight) =>          flight.trip_class === data.selectedFlightClass ||          flight.number_of_changes === data.selectedChanges      );    }    //flight changes    else if (...) {      state.flights; // not sure about this line of code    }  }}

上述代码存在以下问题:

立即学习“前端免费学习笔记(深入)”;

filter 方法不会直接修改原数组。 filter 方法返回一个新的数组,需要将其赋值给 state.flights 才能更新 state。直接修改 state 数组可能导致性能问题。 如果 flights 数组非常大,每次过滤都会创建一个新的数组,可能导致性能下降。逻辑复杂,可读性差。 将过滤逻辑放在 mutation 中,会使 mutation 变得复杂,难以理解和维护。

使用 Getters 进行数据过滤

更推荐的做法是使用 getters 来进行数据过滤。Getters 类似于 computed properties,可以根据 state 计算出新的值,而不会直接修改 state。

getters: {  getFlightsByTripClass: (state) => (tripClass) => {    return state.flights.filter(flight => flight.trip_class === tripClass);  }}

上述代码定义了一个名为 getFlightsByTripClass 的 getter,它接收一个 tripClass 参数,并返回 flights 数组中所有 trip_class 等于 tripClass 的 flight 对象。

在 Vue 组件中使用 getter:

computed: {  filteredFlights() {    return this.$store.getters.getFlightsByTripClass(1);  }}

这样,filteredFlights computed property 就会根据 tripClass 的值动态地过滤 flights 数组,而不会直接修改 state。

优势

使用 Getters 进行数据过滤的优势:

不直接修改 state: 保证了 state 的不可变性,符合 Vuex 的设计原则。提高性能: Getters 会缓存计算结果,只有当依赖的 state 发生变化时才会重新计算,避免了不必要的性能开销。提高代码可读性和可维护性: 将过滤逻辑放在 getters 中,使代码更加清晰和易于理解。

代码规范

除了使用 getters 之外,遵循良好的代码规范也很重要。例如,使用驼峰命名法来命名变量,可以提高代码的可读性。

// 推荐numberOfChange// 不推荐number_of_change

总结

在 Vuex 中,Mutations 用于同步修改 state,而 Getters 用于从 state 中派生出新的值。当需要过滤 state 中的数组数据时,推荐使用 Getters,这样可以保证 state 的不可变性,提高性能,并提高代码的可读性和可维护性。同时,遵循良好的代码规范,可以使代码更加清晰和易于理解。

以上就是Vuex Mutations 正确使用指南:过滤 State 中的数组数据的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1512789.html

赞 (0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
解决JavaScript书签脚本的语法错误:理解自动分号插入(ASI)的陷阱
上一篇 2025年12月20日 07:20:26
React Test Renderer:使用 findAll 精准查找元素
下一篇 2025年12月20日 07:20:37

相关推荐

  • Java集合与字符串操作:高效移除元素与字符的策略

    Java集合与字符串操作:高效移除元素与字符的策略Java集合与字符串操作:高效移除元素与字符的策略Java集合与字符串操作:高效移除元素与字符的策略Java集合与字符串操作:高效移除元素与字符的策略

    本文旨在探讨在Java中如何高效地从集合中移除特定元素,以及从字符串中移除特定字符。我们将分析常见的误区,并提供基于Java 8 Stream API、List.removeIf()方法以及String类方法的最佳实践,帮助开发者编写更简洁、性能更优的代码。 1. 从集合中移除特定元素 在Java中…

    2026年10月7日 • 用户投稿
    000
  • vivoNEX手机为什么删不了应用?解决系统软件卸载的实用方法

    首先检查应用权限与管理设置,关闭自启动等权限后尝试卸载;若无效,强制停止进程并清除数据;系统预装应用可禁用;可疑应用在安全模式下卸载;顽固应用通过ADB命令行深度卸载。 如果您尝试从vivo NEX手机中删除某个应用程序,但操作无法完成,则可能是由于应用权限限制、系统预装保护或后台进程占用等原因。以…

    2026年10月7日
    100
  • 如何使用Java发送HTTP请求?HttpURLConnection实战

    如何使用Java发送HTTP请求?HttpURLConnection实战如何使用Java发送HTTP请求?HttpURLConnection实战如何使用Java发送HTTP请求?HttpURLConnection实战如何使用Java发送HTTP请求?HttpURLConnection实战

    发送http请求可通过java自带的httpurlconnection实现,适用于轻量级场景。1. 创建url对象并调用openconnection()获取连接,设置请求方法、超时时间及输入输出权限;2. 发送get请求需调用connect(),通过getinputstream()读取响应内容,使用…

    2026年10月7日 • 用户投稿
    300
  • Java响应式编程的背压处理策略

    Java响应式编程的背压处理策略Java响应式编程的背压处理策略Java响应式编程的背压处理策略Java响应式编程的背压处理策略

    响应式编程需要背压机制,是因为它能解决生产者与消费者速度不匹配导致的内存溢出或系统崩溃问题。1. 背压通过“拉取”机制让消费者主动控制接收数据量,确保系统稳定性;2. 常见策略包括缓冲、丢弃、错误和限速,分别适用于数据完整性要求高、可接受丢失、需立即报错及需源头控速的场景;3. 自定义subscri…

    2026年10月7日 • 用户投稿
    100
  • 为什么荣耀手机的预装软件删不了?快速卸载系统应用的实用指南

    无法删除荣耀手机预装软件时,首先确认是否为系统核心组件(如电话、短信),若“卸载”按钮灰色则不可移除;其次检查是否开启“锁定布局”,需双指捏合关闭该功能;再查看设备管理器中是否激活了目标应用,停用后方可卸载;对于已更新的预装应用,需先“卸载更新”再移除;最后建议切换至荣耀桌面操作,避免第三方桌面限制…

    2026年10月7日
    200
  • 外卖大战没打过瘾 三巨头又卷起了硬折扣

    外卖大战没打过瘾 三巨头又卷起了硬折扣外卖大战没打过瘾 三巨头又卷起了硬折扣外卖大战没打过瘾 三巨头又卷起了硬折扣外卖大战没打过瘾 三巨头又卷起了硬折扣

    刚结束外卖领域的激烈角逐,阿里、京东与美团又迅速将战场转移到了新领域。 就在近日,美团自营的硬折扣超市——“快乐猴”首店于杭州正式亮相。 开业当天可谓人山人海:清晨七点半,大爷大妈们便已精神抖擞地排起长队;到了晚上七八点,下班的年轻人也纷纷涌入,在店门口形成了一条长长的队伍。 这里的商品价格极具冲击…

    2026年10月7日 • 用户投稿
    400
  • 如何高效管理电商购物车中的可配置商品组合,使用SprykerConfigurableBundleCart模块轻松实现

    如何高效管理电商购物车中的可配置商品组合,使用SprykerConfigurableBundleCart模块轻松实现如何高效管理电商购物车中的可配置商品组合,使用SprykerConfigurableBundleCart模块轻松实现如何高效管理电商购物车中的可配置商品组合,使用SprykerConfigurableBundleCart模块轻松实现如何高效管理电商购物车中的可配置商品组合,使用SprykerConfigurableBundleCart模块轻松实现

    可以通过一下地址学习composer:学习地址 在电商平台开发中,购物车模块的核心功能看似简单,实则暗藏玄机。尤其当业务需求涉及到“可配置的商品组合”时,比如用户可以自由选择电脑的内存、硬盘、显卡,然后作为一个整体加入购物车,问题就变得异常棘手。 我曾经在一个项目中就遇到了这样的困境。我们的平台需要…

    2026年10月7日 • 用户投稿
    500
  • Spring Retry中的指数退避策略配置

    Spring Retry中的指数退避策略配置Spring Retry中的指数退避策略配置Spring Retry中的指数退避策略配置Spring Retry中的指数退避策略配置

    spring retry 中的指数退避策略通过逐步延长重试间隔时间,避免因频繁重试加重系统负担。1. 它在首次失败后延迟指定时间(如 1 秒),2. 每次重试间隔乘以指定倍数(如 2 倍),3. 最大延迟不超过设定上限(如 30 秒)。该策略解决了瞬时故障下重试风暴导致服务雪崩的问题,适用于远程调用…

    2026年10月6日 • 用户投稿
    300
  • 如何安全地评估数学表达式?使用langleyfoxall/math_eval轻松解决eval()风险

    如何安全地评估数学表达式?使用langleyfoxall/math_eval轻松解决eval()风险如何安全地评估数学表达式?使用langleyfoxall/math_eval轻松解决eval()风险如何安全地评估数学表达式?使用langleyfoxall/math_eval轻松解决eval()风险如何安全地评估数学表达式?使用langleyfoxall/math_eval轻松解决eval()风险

    可以通过一下地址学习composer:学习地址 告别 eval() 的安全隐患:从实际需求到优雅解决方案 想象一下,你正在开发一个网站,其中有一个功能是让用户自定义一些计算逻辑。例如,一个电商平台允许商家设置复杂的折扣规则,如“商品A数量 * 2 + 商品B价格 / 3”。为了实现这样的动态计算,你…

    2026年10月6日 • 用户投稿
    100
  • Java调用Python脚本的几种实现方式对比

    Java调用Python脚本的几种实现方式对比Java调用Python脚本的几种实现方式对比Java调用Python脚本的几种实现方式对比Java调用Python脚本的几种实现方式对比

    java调用python脚本有三种主要方式:进程调用、jython嵌入和rpc/消息队列;2. 进程调用通过runtime.exec或processbuilder启动独立python进程,适用于简单脚本但性能开销大;3. jython嵌入将python代码编译为java字节码,实现无缝集成但不支持c…

    2026年10月6日 • 用户投稿
    200
  • Java实现多级缓存架构的详细设计与性能优化方案

    Java实现多级缓存架构的详细设计与性能优化方案Java实现多级缓存架构的详细设计与性能优化方案Java实现多级缓存架构的详细设计与性能优化方案Java实现多级缓存架构的详细设计与性能优化方案

    多级缓存架构通过分层存储提升性能并降低数据库压力。1. 其基本结构由本地缓存(如caffeine)和远程缓存(如redis)组成,访问流程依次为本地缓存→远程缓存→数据库。2. java中可通过caffeine实现本地缓存、spring data redis实现远程缓存,并封装统一访问接口。3. 性…

    2026年10月6日 • 用户投稿
    100
  • 游客掉入趵突泉 网友:大家都是来看的,为什么你能又游又喝

    游客掉入趵突泉 网友:大家都是来看的,为什么你能又游又喝游客掉入趵突泉 网友:大家都是来看的,为什么你能又游又喝游客掉入趵突泉 网友:大家都是来看的,为什么你能又游又喝游客掉入趵突泉 网友:大家都是来看的,为什么你能又游又喝

    近日,一则关于游客掉入趵突泉的视频在网络上引发热议。网友们对此事的评论角度清奇,充满了幽默感。其中一条评论尤其经典:“大家都是付40元的门票来看趵突泉,这人诡计多端跳下去又喝又游的,开始以为他淹着了,当另一个游客下水,看到水还没过腰的时候,真的绷不住了。”这番调侃迅速传开,为这起意外事件增添了不少喜…

    2026年10月6日 • 用户投稿
    100
  • Yii框架中的表单验证:确保输入数据正确

    yii框架是一个高效、灵活的web应用程序开发框架。在yii框架中,表单验证是确保用户输入的数据正确的重要部分。本文将介绍yii框架中的表单验证及其相关技术。 一、表单验证概述 表单验证是指在提交数据之前,对输入的数据进行验证,确保数据符合规定的格式和要求。在Yii框架中,表单验证可以通过模型来实现…

    用户投稿 2026年10月6日
    200
  • 如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?如何用SELECT语句精确查询特定列?星号(*)通配符的使用场景与风险有哪些?

    明确指定select语句中的列名能提升查询效率,减少数据传输。1.避免使用select *,列出必要列以增强可读性和安全性;2.结合where和join优化查询逻辑,减少全表扫描;3.合理创建索引以加速检索但需权衡写入性能;4.使用explain分析执行计划定位性能瓶颈;5.用coalesce处理n…

    2026年10月6日 • 用户投稿
    100
  • Spring Cloud Gateway自定义过滤器的开发指南

    Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南Spring Cloud Gateway自定义过滤器的开发指南

    自定义spring cloud gateway过滤器的核心方式是实现abstractgatewayfilterfactory。首先定义config类承载配置参数,接着覆写apply方法返回gatewayfilter实例并编写filter逻辑,访问serverwebexchange进行请求/响应处理,…

    2026年10月6日 • 用户投稿
    200
  • VSCode如何集成GraphQL开发工具 VSCode GraphQL插件的使用指南

    首先安装合适的graphql插件,如graphql或apollo graphql;接着在settings.json中配置schemapath和graphql服务器url;然后利用插件实现语法高亮、自动补全、schema验证及查询运行;可选集成prettier和eslint以格式化代码和检查风格;根据…

    2026年10月6日
    100
  • AI证件照换背景的5个实用技巧

    AI证件照换背景的5个实用技巧AI证件照换背景的5个实用技巧AI证件照换背景的5个实用技巧AI证件照换背景的5个实用技巧

    需要使用ai来换证件照的背景,因为ai能节省时间并提供高质量的背景替换效果。1. 选择合适的ai工具,如remove.bg。2. 调整背景颜色和亮度以匹配肤色和服装。3. 处理边缘细节,避免模糊或伪影。4. 选择专业且简洁的背景。5. 保存照片时注意格式和分辨率要求。 ☞☞☞AI 智能聊天, 问答助…

    2026年10月6日 • 用户投稿
    800
  • 解决PostgreSQL时间戳时区偏移超出范围错误

    解决PostgreSQL时间戳时区偏移超出范围错误解决PostgreSQL时间戳时区偏移超出范围错误解决PostgreSQL时间戳时区偏移超出范围错误解决PostgreSQL时间戳时区偏移超出范围错误

    本文旨在解决PostgreSQL数据库中time zone displacement out of range错误,该错误通常源于时间戳字符串中时区偏移部分的误解和不当格式化。我们将深入分析错误产生的原因,特别是结合Python代码生成时间戳字符串时的常见陷阱,并提供正确的处理策略和最佳实践,确保时…

    2026年10月6日 • 用户投稿
    300
  • 构建Java文件统计类:实现文件行数与内容匹配计数

    构建Java文件统计类:实现文件行数与内容匹配计数构建Java文件统计类:实现文件行数与内容匹配计数构建Java文件统计类:实现文件行数与内容匹配计数构建Java文件统计类:实现文件行数与内容匹配计数

    本文详细指导如何在Java中构建一个FileStats类,用于统计文件的总行数以及查找包含特定文本内容的行数。教程涵盖了类的设计、方法实现、文件I/O操作的最佳实践(如try-with-resources),并着重纠正了在使用Scanner读取文件时常见的初始化错误,确保代码的健壮性和正确性。 1.…

    2026年10月6日 • 用户投稿
    100
  • win10怎么映射网络驱动器_win10映射网络驱动器操作教程

    win10怎么映射网络驱动器_win10映射网络驱动器操作教程win10怎么映射网络驱动器_win10映射网络驱动器操作教程win10怎么映射网络驱动器_win10映射网络驱动器操作教程win10怎么映射网络驱动器_win10映射网络驱动器操作教程

    将网络驱动器映射到本地可简化局域网共享文件夹访问。1、通过文件资源管理器:打开“此电脑”,点击“映射网络驱动器”,设置驱动器号、输入路径如IP共享名,勾选自动重新连接及使用其他凭据(如需),完成即可;2、通过“运行”命令:Win+R输入共享路径,连接后右键文件夹选择“映射网络驱动器”,按向导完成;3…

    2026年10月6日 • 用户投稿
    200

发表回复

登录后才能评论
关注微信