news 2026/5/6 10:03:09

Vue 无限更新循环警告:You may have an infinite update loop

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Vue 无限更新循环警告:You may have an infinite update loop

Vue 无限更新循环警告:You may have an infinite update loop —— 3 分钟定位 + 修复实战手册

当你在控制台看到:

[Vue warn]: You may have an infinite update loop in a component render function.

Vue 在告诉你:
「你的模板或计算属性在不停地修改响应式数据,超过 100 次,进入死循环。」
按「一看二断三重构」三步法,3 分钟止血!


一、一看:确认死循环堆栈

点击控制台红色堆栈→ 找到反复触发的函数/计算属性/模板行号。


二、二断:4 大高频死循环场景

① 计算属性里改自己依赖

<script setup> const a = ref(1); const b = computed(() => { a.value++; // ❌ 读 a → 计算 → 又改 a → 死循环 return a.value * 2; }); </script> <template>{{ b }}</template>

修复:计算属性只读不改

constb=computed(()=>a.value*2);// ✅ 纯计算

② 模板里调用副作用函数

<template> <div>{{ computeAndModify() }}</div> <!-- ❌ 渲染阶段改数据 --> </template> <script setup> const list = ref([1]); function computeAndModify() { list.value.push(list.value.length); // 渲染 → 改数据 → 再渲染 return list.value.length; } </script>

修复:移出渲染阶段

functioncompute(){returnlist.value.length;// ✅ 只读}
<div>{{ compute() }}</div>

③ watch 里改自己依赖

<script setup> const count = ref(0); watch(count, (newVal) => { count.value = newVal + 1; // ❌ 改自己 → 又触发 watch }); </script>

修复:有退出条件

watch(count,(newVal)=>{if(newVal>=10)return;// ✅ 有上限count.value=newVal+1;});

④ 双向绑定死循环(v-model 自增)

<!-- 父 --> <MyInput v-model="num" /> <!-- 子 --> <script setup> const props = defineProps(['modelValue']); const emit = defineEmits(['update:modelValue']); const onInput = (e) => { emit('update:modelValue', Number(e.target.value) + 1); // ❌ 输入+1 → 又触发输入 }; </script>

修复:不 emit 比输入更大的值

constonInput=(e)=>{emit('update:modelValue',Number(e.target.value));// ✅ 原值返回};

三、三重构:万能止血模板

  1. 计算属性只读不改
  2. 模板/渲染只读数据,副作用移出useEffect/ 事件
  3. watch有退出条件(if (newVal === oldVal) return)
watch(count,(newVal,oldVal)=>{if(newVal===oldVal)return;// 值没变if(newVal>=100)return;// 上限退出count.value=newVal+1;// 业务逻辑});

四、预防 checklist

  • 计算属性纯函数,不改外部状态
  • 模板/渲染只读数据,不调副作用函数
  • watch有退出条件,不修改自己
  • v-model不 emit 比输入更大的值
  • 控制台「infinite loop」= 立即检查计算/渲染/ watch 里是否改数据

五、一句话总结

「无限更新循环」= 计算/渲染/ watch 里在改自己数据。
用「只读不改 + 有退出条件 + 移出渲染」三件套,让更新停在 100 次以内,Vue 立刻安静!


最后问候亲爱的朋友们,并邀请你们阅读我的全新著作

📚 《Vue.js 3企业级项目开发实战(微课视频版》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/1 2:38:59

口碑好的煤化工企业各类水池清淤施工服务商

口碑卓越的煤化工企业如何选择各类水池清淤施工服务商在煤化工这一高能耗、高流程复杂性的行业中&#xff0c;各类工艺水池、循环水池、沉淀池及事故应急池的正常运行是保障生产连续性与安全环保达标的关键。然而&#xff0c;水池淤积是普遍存在的难题&#xff0c;不仅会缩减有…

作者头像 李华
网站建设 2026/5/3 1:27:43

智能邮件分拣机的PLC控制系统设计

邮件分拣机plc s7-1200 1&#xff09;邮件A、邮件B、邮件C、邮件D之间有不同之处。 2&#xff09;邮件传送之间有必要的加入限位开关。 3&#xff09;气缸、传送带动作有相应的指示灯提示。 4&#xff09;分拣在各区的邮件可以进行自动计件&#xff0c;并实时显示计件数。 5&a…

作者头像 李华
网站建设 2026/5/2 20:21:21

Java毕设选题推荐:基于springboot的学院失物招领平台的设计与实现失物信息的发布、查找、管理与互动交流【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/5/3 14:30:46

10000字讲透C++无锁编程:看完就能写出自己的无锁队列

一、多线程编程,绑不开的锁 写多线程程序,最头疼的是什么?数据竞争。 两个线程同时读写同一块内存,结果就是灾难——一个线程刚把计数器读出来准备加1,另一个线程也读了同样的值,两个线程各自加完再写回去,本该加2的计数器只加了1。这种Bug藏得深,复现难,调起来能让…

作者头像 李华
网站建设 2026/5/3 10:41:54

unittest中使用装饰器来实现环境的动态切换

为什么要在测试框架中实现动态切换环境&#xff1f; 多环境验证&#xff1a; 不同的开发阶段&#xff08;如开发、测试、预发布和生产&#xff09;通常有不同的配置参数&#xff0c;包括但不限于数据库连接信息、API密钥、服务器地址等。通过动态切换环境&#xff0c;可以在执…

作者头像 李华
网站建设 2026/5/3 7:51:34

57页精品PPT | 工业互联网平台赋能制造业数字化转型解决方案

当前工厂运营面临多重严峻挑战&#xff1a;设备频繁停机导致生产连续性受阻&#xff0c;人力配置冗余与作业效率低下并存&#xff0c;库存积压与运营成本持续攀升形成恶性循环。订单结构呈现碎片化特征&#xff0c;交付周期延长引发客户满意度显著下降&#xff0c;同时环保合规…

作者头像 李华