Vue.js报错-Maximum-recursive-updates-exceeded
Vue.js 报错Maximum recursive updates exceeded in component一句话总结用「watch computed nextTick」三件套让响应式更新不再无限递归警告瞬间消失正文目录报错含义Vue 在警告什么「递归更新」5 大高频翻车场景 修复代码万能兜底watch、computed、nextTick预防 checklist不再踩坑一句话总结一、报错含义Vue 在警告什么「递归更新」当你在控制台看到Maximum recursive updates exceeded in component xxx. This means you have a reactive effect that is mutating its own dependency and recursively triggering itself.Vue 在告诉你「你的响应式逻辑形成了无限循环 —— A 修改了 BB 变化又触发修改 AA 又修改 B……死循环了」Vue 内置了递归保护机制当同一个组件的渲染函数被递归触发超过 100 次时就会抛出此警告并停止更新。本质响应式依赖形成了循环引用。二、5 大高频翻车场景 修复代码① watch 修改了被监听的数据 —— 自我递归script setup import { ref, watch } from vue; const count ref(0); // ❌ watch 修改了被监听的 countcount 变化又触发 watch watch(count, (newVal) { count.value newVal 1; // ❌ 死循环 }); /script修复用中间变量或条件退出script setup import { ref, watch } from vue; const count ref(0); // ✅ 加退出条件避免无限递归 watch(count, (newVal) { if (newVal 10) return; // ✅ 有上限 count.value newVal 1; }); /script② computed 里修改了依赖的响应式数据script setup import { ref, computed } from vue; const price ref(100); const count ref(2); // ❌ computed 中修改了依赖的 price const total computed(() { price.value price.value 10; // ❌ 修改依赖 → 死循环 return price.value * count.value; }); /script修复computed 只读不修改依赖script setup import { ref, computed } from vue; const price ref(100); const count ref(2); // ✅ computed 只做计算不修改依赖 const total computed(() price.value * count.value); // ✅ 需要修改 price用 watch 或事件 function updatePrice() { price.value 10; } /script③ 模板中绑定了互相依赖的数据script setup import { ref, computed } from vue; const firstName ref(张); const lastName ref(三); // ❌ fullName 依赖 firstNamefirstName 又依赖 fullName const fullName computed(() { firstName.value fullName.value; // ❌ 互相依赖 return firstName.value lastName.value; }); /script修复单向数据流避免互相依赖script setup import { ref, computed } from vue; const firstName ref(张); const lastName ref(三); // ✅ 单向依赖fullName 依赖 firstName但 firstName 不依赖 fullName const fullName computed(() firstName.value lastName.value); // ✅ 需要反向更新用 watch watch(fullName, (val) { // 单独处理 }); /script④ watch 监听 computed又在回调中修改 computed 的源数据script setup import { ref, computed, watch } from vue; const list ref([1, 2, 3]); // ❌ doubleList 依赖 listwatch 修改 list → doubleList 变化 → watch 触发 const doubleList computed(() list.value.map(i i * 2)); watch(doubleList, () { list.value.push(list.value.length 1); // ❌ 修改源数据 → 死循环 }); /script修复监听不同数据源或用 once 标志script setup import { ref, computed, watch } from vue; const list ref([1, 2, 3]); const doubleList computed(() list.value.map(i i * 2)); // ✅ 监听 doubleList 的长度而非内容或加条件 watch(() doubleList.value.length, (newLen, oldLen) { if (newLen oldLen) return; // ✅ 避免无意义触发 // 只在真正需要时更新 }); /script⑤ 组件 props 和 emit 形成循环!-- 父组件 -- script setup import { ref } from vue; import Child from ./Child.vue; const value ref(); const handleUpdate (val) { value.value val.toUpperCase(); // ❌ 转换后又传给子组件 → 子组件 emit → 再传回 }; /script template Child :modelValuevalue update:modelValuehandleUpdate / /template!-- 子组件 -- script setup const props defineProps([modelValue]); const emit defineEmits([update:modelValue]); // ❌ watch props 变化后立即 emit父组件又修改 → 循环 watch(() props.modelValue, (val) { emit(update:modelValue, val.toLowerCase()); // ❌ 死循环 }); /script修复子组件不做反向转换或用 computed 只读!-- 子组件修复版 -- script setup import { computed } from vue; const props defineProps([modelValue]); const emit defineEmits([update:modelValue]); // ✅ 用 computed 展示转换后的值不 emit 回去 const displayValue computed(() props.modelValue.toLowerCase()); // ✅ 只在用户输入时 emit function handleInput(e) { emit(update:modelValue, e.target.value); } /script三、万能兜底watch、computed、nextTick场景工具示例需要修改被监听的数据watch 条件退出if (val 10) return;需要派生数据computed只读computed(() a b)需要延迟更新nextTicknextTick(() { ... })需要批量更新watch flush:‘post’watch(src, fn, { flush: post })万能模板script setup import { ref, watch, nextTick } from vue; const data ref(null); // ✅ 万能模板条件退出 nextTick 延迟 watch(data, async (newVal) { if (!newVal) return; // ✅ 条件退出 await nextTick(); // ✅ 延迟到 DOM 更新后 // 安全地修改数据 }); /script四、预防 checklistwatch 回调绝不直接修改被监听的源数据computed只做计算不产生副作用响应式数据之间避免互相依赖A 依赖 BB 又依赖 Awatch 监听 computed 时不在回调中修改 computed 的源数据父子组件 props/emit不做双向转换控制台「Maximum recursive updates」 立即检查响应式依赖链是否有环五、一句话总结「Maximum recursive updates exceeded」 响应式依赖形成了循环引用。用「watch 条件退出 computed 只读」三件套让响应式更新不再无限递归警告瞬间消失最后问候亲爱的朋友们并邀请你们阅读我的全新著作 《Vue.js 3企业级项目开发实战微课视频版》

相关新闻

From Pixar-Themed Sets to a Myst

From Pixar-Themed Sets to a Myst

迪士尼Lorcana背靠整个迪士尼角色库,在集换式卡牌游戏中拥有独特优势。外媒IGN近日整理了Ravensburger已公布的2026年产品计划,从年初的冬季系列到10月的《寻梦环游记》扩展,路线图逐渐清晰,但下半年仍有待填补的空白。 【Winter…

2026/7/23 9:22:33 阅读更多 →
Nuxt4阶段六:工程化与进阶 —— 模块、中间件、插件、TS 与测试

Nuxt4阶段六:工程化与进阶 —— 模块、中间件、插件、TS 与测试

Nuxt4阶段六:工程化与进阶 —— 模块、中间件、插件、TS 与测试 学习目标:会用 Nuxt Modules、路由中间件、插件;理解 Nuxt 4 TypeScript 分层;能写基础测试与统一错误处理。 预计时间:1–2 周 前置:完成阶…

2026/7/23 9:22:33 阅读更多 →
你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生

你彻底搞清楚“I/O多路复用”和“异步I/O”的前世今生

在网络的初期,网民很少,服务器完全无压力,那时的技术也没有现在先进,通常用一个线程来全程跟踪处理一个请求。因为这样最简单。 其实代码实现大家都知道,就是服务器上有个ServerSocket在某个端口监听,接收到…

2026/7/23 9:22:33 阅读更多 →

最新新闻

A股量化策略日报(2026年07月23日)

A股量化策略日报(2026年07月23日)

A股量化策略整合报告 2026年07月23日 整合时间:08:20📊 报告自动同步 (03:16) Response API call failed after 3 retries: HTTP 429: 已达到 Token Plan 用量上限:请升级 Token Plan 套餐或购买积分补充用量。 (2056)📊 量化策略…

2026/7/23 16:40:55 阅读更多 →
虚拟机扩容磁盘

虚拟机扩容磁盘

虚拟机关机 → 编辑虚拟机设置 → 硬盘 (SCSI) → 扩展,点击扩展后输入想要扩展的容量,:点击确定后重启虚拟机执行以下命令: # 1. 查看磁盘分区,确认 /dev/sda、/dev/sda3 lsblk# 2. 扩展分区表(将空闲空间…

2026/7/23 16:40:55 阅读更多 →
软件压缩会影响软件使用吗?三类文件打包前必看的风险与正确操作

软件压缩会影响软件使用吗?三类文件打包前必看的风险与正确操作

很多用户会问:软件压缩会影响软件的使用吗?这个问题的答案取决于你压缩的是什么。安装包和绿色软件文件夹可以打包保存,但已经安装到系统中的软件目录如果直接压缩,很可能会影响启动、更新甚至卸载。下面从文件类型、压缩前检查到…

2026/7/23 16:40:55 阅读更多 →
[具身智能-624]:人眼传感器,是YUV, 还是RGB?

[具身智能-624]:人眼传感器,是YUV, 还是RGB?

人眼感光底层 ≠ RGB,也不等于标准 YUV;但特性高度契合 YUV 的设计思想。我们分层通俗讲清楚,区分三层东西:1)人眼真实生理感光细胞2)RGB(显示器 / 相机的人为模型)3)YUV…

2026/7/23 16:40:55 阅读更多 →
AI革命中谷歌等超大规模云服务商投资激增,股价触底能否迎来转机?

AI革命中谷歌等超大规模云服务商投资激增,股价触底能否迎来转机?

AI淘金热:云服务商成资金“输血者”在AI革命浪潮中,以谷歌、亚马逊、微软、Meta、甲骨文五家企业为代表的超大规模云服务商,成为了这场变革的资金提供方。正如法国东方汇理资产管理公司股票投资部门首席投资官Barry Glavin所言,“…

2026/7/23 16:40:55 阅读更多 →
PCDN跑量策略:汇聚与分散模式的技术选型

PCDN跑量策略:汇聚与分散模式的技术选型

1. PCDN跑量策略的本质之争在内容分发网络(CDN)运营领域,PCDN(P2P CDN)的跑量策略选择一直是实际业务中的关键决策点。最近和几个同行交流时发现,大家对于"该用汇聚模式还是分散模式"这个问题&am…

2026/7/23 16:39:55 阅读更多 →

日新闻

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表)

更多请点击: https://intelliparadigm.com 第一章:从单点好评到指数级传播:AI副业主理人必须掌握的4层口碑渗透模型(含ROI测算表) 当AI副业主理人不再仅满足于单次服务交付,而是主动构建可复用、可裂变、可…

2026/7/23 0:00:25 阅读更多 →
AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析

更多请点击: https://codechina.net 第一章:AI写作开头钩子设计:为什么你的AI文案完读率不足18%?——基于2,346篇A/B测试报告的归因分析 在对2,346篇跨行业AI生成文案的A/B测试数据进行聚类分析后,我们发现&#xff1…

2026/7/23 0:01:26 阅读更多 →
Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具

Chitchatter完整指南:免费开源的终极点对点安全聊天工具 【免费下载链接】chitchatter Secure peer-to-peer chat that is serverless, decentralized, and ephemeral 项目地址: https://gitcode.com/gh_mirrors/ch/chitchatter Chitchatter是一款革命性的安…

2026/7/23 0:01:26 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/22 8:58:19 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/22 19:43:43 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/22 12:54:44 阅读更多 →

月新闻