v-memo

Memoizes a subtree, re-rendering only when dependencies change.

Since Vue 3.2 Spec ↗

Syntax

v-memo="[dep1, dep2]"

Parameters

NameTypeRequiredDescription
deps any[] No Array of values; subtree updates only if one changes.

Returns

directive — Skips re-render when deps are unchanged.

Examples

<script setup lang="ts">
import { ref } from 'vue';
const list = ref(Array.from({ length: 1000 }, (_, i) => ({ id: i })));
const selected = ref(0);
</script>

<template>
  <div
    v-for="item in list"
    :key="item.id"
    v-memo="[item.id === selected]"
  >
    {{ item.id }} {{ item.id === selected ? 'X' : '' }}
  </div>
</template>

Notes

v-memo skips updating the subtree unless one of the array entries changed (shallow compare), similar to React.memo. With an empty array `v-memo="[]"` it behaves like v-once. Primarily a large-list performance optimization; avoid premature use as it adds complexity.