Назад к вопросам
Middle
178
questionbank
Что такое 'watch' и 'computed' в Vue.js, и как они работают?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
watch (наблюдатели)
- Используется для реакции на изменение конкретного реактивного свойства.
- Позволяет выполнять асинхронные операции, задерживать выполнение или выполнять сложные вычисления, когда значение свойства изменяется.
- Настраивается с помощью опции
watchвнутри компонента. - Может иметь параметры
handler(функция-обработчик),deep(глубокое наблюдение за вложенными объектами/массивами) иimmediate(выполнение обработчика при создании компонента).
Пример:
watch: {
// Наблюдает за изменением свойства `firstName`
firstName(newValue, oldValue) {
console.log(`Имя изменилось с ${oldValue} на ${newValue}`);
},
// Глубоко наблюдает за объектом `userInfo`
userInfo: {
handler(newValue, oldValue) {
console.log('Информация о пользователе изменена.');
},
deep: true
}
}
computed (вычисляемые свойства)
- Используется для декларативного создания зависимых реактивных данных.
- Результат кэшируется до тех пор, пока не изменятся его реактивные зависимости.
- Вычисляется лениво, только когда к нему обращаются.
- Настраивается с помощью опции
computedвнутри компонента. - Должен возвращать значение.
Пример:
computed: {
// Вычисляет полное имя на основе firstName и lastName
fullName() {
return `${this.firstName} ${this.lastName}`;
},
// Фильтрует список пользователей
filteredUsers() {
return this.users.filter(user => user.isActive);
}
}
Основные отличия
| Признак | watch | computed |
|---|---|---|
| Назначение | Реагировать на изменение свойства | Вычислять зависимые данные |
| Кэширование | Нет | Да (по зависимостям) |
| Ленивость | Нет | Да |
| Return-значение | Нет (выполняет побочный эффект) | Да (возвращает вычисленное значение) |
| Асинхронность | Да | Нет |
| Синтаксис | Объект с функциями-обработчиками | Объект с функциями, возвращающими значение |
Используйте computed для получения реактивных данных, являющихся производными от других данных. Используйте watch для выполнения побочных эффектов (например, вызовов API, изменения DOM), когда значение реактивного свойства изменяется, или для выполнения более сложных логических реакций.