v-memo skips the update of a subtree when the dependencies it lists have not changed, which is a manual optimisation and should be treated as one.
<div v-for="row in rows" :key="row.id" v-memo="[row.id === selectedId]">
<!-- 40 elements per row -->
</div>
<!-- only re-renders a row when its selected state flips.
everything else about the row is assumed static —
and if it is not, the change silently does not appear. -->
The failure mode is a stale render with no error, which is why this belongs on a measured hot path and nowhere else. The dependency array must include everything the subtree reads and there is no check that it does, exactly like a dependency array in React. On a four-thousand-row table with a selection it took the update from 190 milliseconds to about 8, which is the kind of number that justifies the risk; below that it does not.