news 2026/8/18 12:01:23

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/8/2 10:03:18

微信小程序uniapp-vue校园二手商城交易积分兑换38gw6

文章目录 具体实现截图主要技术与实现手段系统设计与实现的思路系统设计方法java类核心代码部分展示结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01; 具体实现截图 本系统&#xff08;程序源码数据库调试部署讲解&#xff09;带文档1…

作者头像 李华
网站建设 2026/8/1 18:15:20

基于Python+Django的框架的黄瓜批发市场管理系统(源码+讲解视频+LW)

本课题针对黄瓜批发市场交易流程分散、库存管控低效、供需信息不对称等问题&#xff0c;设计并实现基于PythonDjango的黄瓜批发市场管理系统。课题以“规范交易、精准管控、高效匹配”为核心目标&#xff0c;依托Python的数据处理优势&#xff0c;结合Django框架的快速开发特性…

作者头像 李华
网站建设 2026/8/3 13:38:43

快速定位bug,编写测试用例

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快作为一名测试人员如果连常见的系统问题都不知道如何分析&#xff0c;频繁将前端人员问题指派给后端人员&#xff0c;后端人员问题指派给前端人员&#xff0c;那么在…

作者头像 李华
网站建设 2026/8/9 18:28:43

springboot大学城水电管理系统(11585)

有需要的同学&#xff0c;源代码和配套文档领取&#xff0c;加文章最下方的名片哦 一、项目演示 项目演示视频 二、资料介绍 完整源代码&#xff08;前后端源代码SQL脚本&#xff09;配套文档&#xff08;LWPPT开题报告&#xff09;远程调试控屏包运行 三、技术介绍 Java…

作者头像 李华
网站建设 2026/8/16 13:34:21

深入浅出理解Spring Boot中的依赖注入

在现代软件开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称DI&#xff09;已经成为了一种常见且重要的设计模式。它的核心思想是将对象的依赖关系从代码中解耦出来&#xff0c;从而提高代码的可维护性、可测试性和灵活性。在Java开发中&#xff0…

作者头像 李华