В чём разница между watch и watchEffect?
Реактивность
`watch` следит за явно указанным источником, `watchEffect` сам отслеживает всё, что прочитал внутри себя, и запускается сразу.
watchEffect
watchEffect(() => {
console.log(`Привет, ${user.value.name}`); // зависимость определяется автоматически
});Выполняется сразу при создании и повторно при изменении любой использованной реактивной переменной.
watch
watch(userId, (newId, oldId) => {
loadUser(newId);
});- Знает старое и новое значение.
- По умолчанию не запускается сразу (для этого
{ immediate: true }). - Явно показывает, от чего зависит.
Когда что
watch— когда важен конкретный источник, нужны старое значение или контроль запуска.watchEffect— когда зависимостей много и не хочется их перечислять.
Оба возвращают функцию остановки, а внутри setup останавливаются автоматически при размонтировании.
Коротко для собеседования
watchEffect сам собирает зависимости и сразу запускается, watch работает по явному источнику и даёт старое значение.