Afin d’observer le changement d’un objet dans un composant VuejS on peut faire ceci :

<script setup>
const form = ref({
  firstname: 'Aurélien',
  lastname: 'Chappard',
})

watch(form.value, (newValue, oldValue)=>{
  console.log(newValue);
  console.log(oldValue);
})
</script>

Dans cet exemple, newValue et oldValue seront identiques car ils font appel à une référence. Si vous n’avez pas besoin d’utiliser newValue ou oldValue, vous pouvez vous contenter de ce code :

<script setup>
const form = ref({
  firstname: 'Aurélien',
  lastname: 'Chappard',
})

watch(form.value, ()=>{
  // faites votre traitement ici...
})
</script>

Sinon, il sera nécessaire de créer un watcher un peu différent :

<script setup>
import {cloneDeep} from "lodash";
const form = ref({
  firstname: 'Aurélien',
  lastname: 'Chappard',
})

watch(() => cloneDeep(form.value), (newValue, oldValue) => {
  // faites votre traitement ici : newValue et oldValue seront différents...
  console.log(newValue);
  console.log(oldValue);
})
</script>

Nous pouvons voir que nous clonons notre objet grace à la fonction cloneDeep de loadash