# Vue: [Vue warn]: Maximum recursive updates exceeded in component <Foo>. This means you have a reactive effect that is mutating its own dependencies and thus recursively triggering itself

**Code:** `[Vue warn]: Maximum recursive updates exceeded` · **Category:** Vue · **Seen on:** Vue

A watcher/computed/render effect keeps changing the state it depends on, creating an infinite update loop.

## Meaning

Look for state mutations in `computed` (should be pure), in templates/render functions, or `watch` callbacks that set the watched value. Use `watch` with conditions, avoid writing to refs read in the same effect, and use `watchEffect` carefully. Debug with `onRenderTriggered`.

## Common causes

- Mutating state inside `computed`/render
- Watcher writes the value it watches
- `v-model` updating itself with transformed value
- Two watchers triggering each other
- Array/objects replaced every render

## Quick fix

1. Make computed pure; move mutations to handlers
2. Add guards: `if (a.value !== next) a.value = next`
3. Break watcher cycles; use `flush: "post"` / `{ deep: false }` as needed

## Detailed fix by platform

### Vue

1. `watch(source, (v) => { if (target.value !== f(v)) target.value = f(v); });`

## How to diagnose

1. **Effect** — Which?
2. **Mutation** — Own dependency?
3. **Guard** — Present?

---
Source: [WhatIsMyError](https://whatismyerror.com/errors/vue/vue-warn-maximum-recursive-updates-exceeded)
