PassFront
  1. PassFront
  2. База знаний
  3. Реактивность

В чём разница между 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 работает по явному источнику и даёт старое значение.

Другие вопросы раздела