Подробное введение в концепцию, использование и некоторые распространенные сценарии применения мониторинга свойств в Vue3.
Подробное введение в концепцию, использование и некоторые распространенные сценарии применения мониторинга свойств в Vue3.

Vue — популярный фреймворк JavaScript.,Используется для создания пользовательских интерфейсов. В Вю,Нам часто необходимо отслеживать изменения в данных,И выполнять соответствующие операции при изменении данных. Vue3 предоставляет функцию под названием «свойства прослушивания».,Делает мониторинг данных проще и эффективнее。Эта статья будет Подробное введение в концепцию, использование и некоторые распространенные сценарии применения мониторинга свойств в Vue3.。

Основные понятия о свойствах прослушивания

Определение атрибутов прослушивания

В Vue3,мы можем пройтиwatchфункция для создания свойств прослушивания。watchФункция принимает два параметра:Данные для мониторинга и функция обратного вызова,Функция обратного вызова автоматически срабатывает при изменении данных. Вот пример свойства прослушивания:

Язык кода:markdown
копировать
<template>
  <div>
    <p>{{ message }}</p>
  </div>
</template>

<script>
import { reactive, watch } from 'vue'

export default {
  setup() {
    const state = reactive({
      message: 'Hello, Vue3!'
    })

    watch(() => state.message, (newVal, oldVal) => {
      console.log(`Message changed from "${oldVal}" to "${newVal}"`)
    })

    return {
      message: state.message
    }
  }
}
</script>

В приведенном выше коде,мы используемreactiveФункция создает объект реактивного состояния.state,который содержит атрибутmessage。Затем,мы используемwatchФункциональный мониторингstate.messageизменения,И распечатывать старые и новые значения при их изменении.

Параметры конфигурации свойств прослушивания

Помимо мониторинга изменений данных,Мы также можем дополнительно контролировать поведение прослушивания с помощью параметров конфигурации.。watchТретий параметр функции — объект конфигурации.,Используется для указания дополнительных параметров. Вот пример:

Язык кода:markdown
копировать
<template>
  <div>
    <p>{{ count }}</p>
  </div>
</template>

<script>
import { reactive, watch } from 'vue'

export default {
  setup() {
    const state = reactive({
      count: 0
    })

    watch(
      () => state.count,
      (newVal, oldVal) => {
        console.log(`Count changed from "${oldVal}" to "${newVal}"`)
      },
      {
        immediate: true,
        deep: true
      }
    )

    return {
      count: state.count
    }
  }
}
</script>

В приведенном выше коде,Мы добавили объект конфигурации,Он содержит два варианта:immediateиdeepimmediateВозможность указать, следует ли выполнять функцию обратного вызова сразу после начала прослушивания.,По умолчаниюfalsedeepВозможность указать, выполнять ли глубокий мониторинг,По умолчаниюfalse。через параметры конфигурации,Мы можем более гибко контролировать поведение мониторинга.

Использование атрибутов прослушивания

Мониторинг основных типов данных

В Vue3,мы можем Мониторинг основных типов Изменения данных (например, строк, чисел, логических значений и т. д.). Ниже приведен Мониторинг основных типов Пример данных:

Язык кода:markdown
копировать
<template>
  <div>
    <input v-model="message" />
    <p>{{ message }}</p>
  </div>
</template>

<script>
import { ref, watch } from 'vue'

export default {
  setup() {
    const message = ref('Hello, Vue3!')

    watch(message, (newVal, oldVal) => {
      console.log(`Message changed from "${oldVal}" to "${newVal}"`)
    })

    return {
      message
    }
  }
}
</script>

В приведенном выше коде,мы используемrefФункция создает реактивную переменную базового типа данных.message。Затем,мы используемwatchФункциональный мониторингmessageизменения,И распечатывать старые и новые значения при их изменении.

Прослушивание объектов и массивов

Помимо основных типов данных,У нас также есть варианты Прослушивание объектов и массивов. В Vue3,Когда мы слушаем объект или массив,По умолчанию будут отслеживаться только изменения самого объекта или массива.,без отслеживания изменений их внутренних свойств. Если вам необходимо глубоко отслеживать изменения в объектах или массивах,может бытьdeepопция установлена ​​наtrue。Ниже приведен Прослушивание объектов и Примеры массивов:

Язык кода:markdown
копировать
<template>
  <div>
    <input v-model="userInfo.name" />
    <ul>
      <li v-for="task in tasks" :key="task.id">{{ task.name }}</li>
    </ul>
  </div>
</template>

<script>
import { ref, watch } from 'vue'

export default {
  setup() {
    const userInfo = ref({ name: 'John Doe' })
    const tasks = ref([
      { id: 1, name: 'Task 1' },
      { id: 2, name: 'Task 2' },
      { id: 3, name: 'Task 3' }
    ])

    watch(
      userInfo,
      (newVal, oldVal) => {
        console.log('User info changed:', newVal, oldVal)
      },
      { deep: true }
    )

    watch(
      tasks,
      (newVal, oldVal) => {
        console.log('Tasks changed:', newVal, oldVal)
      },
      { deep: true }
    )

    return {
      userInfo,
      tasks
    }
  }
}
</script>

В приведенном выше коде,мы используемrefФункция создает реактивный объектuserInfoи数组tasks。Затем,мы используемwatchФункциональный мониторинг它们изменения,и установивdeepВарианты:trueДля достижения глубокого мониторинга。

Сценарии применения для мониторинга свойств

Проверка формы и обработка данных

В реальной разработке нам часто приходится отслеживать изменения в полях формы и выполнять проверку и обработку данных на основе значений полей. Прослушивая атрибуты, мы можем отслеживать изменения в полях формы в режиме реального времени и выполнять соответствующую логику проверки при их изменении. Вот пример прослушивания поля формы:

Язык кода:markdown
копировать
<template>
  <div>
    <input v-model="username" />
    <p v-if="isUsernameInvalid">Invalid username!</p>
  </div>
</template>

<script>
import { ref, watch } from 'vue'

export default {
  setup() {
    const username = ref('')
    const isUsernameInvalid = ref(false)

    watch(username, (newVal) => {
      // Perform validation logic
      if (newVal.length < 4 || newVal.length > 16) {
        isUsernameInvalid.value = true
      } else {
        isUsernameInvalid.value = false
      }
    })

    return {
      username,
      isUsernameInvalid
    }
  }
}
</script>

В приведенном выше коде,мы используемrefФункция создает реактивную строковую переменную.usernameи布尔值变量isUsernameInvalid。Затем,мы используемwatchФункциональный мониторингusernameизменения,и проверить на основе длины имени пользователя. Если длина имени пользователя меньше 4 или больше 16,Затем установитеisUsernameInvalidдляtrue,否Затем установитедляfalse。в шаблоне,мы основываемся наisUsernameInvalidзначение для отображения соответствующего сообщения об ошибке。

Асинхронные запросы и обработка побочных эффектов

В процессе разработки нам часто приходится получать данные посредством асинхронных запросов и обрабатывать их после их возврата. Прослушивая атрибуты, мы можем отслеживать изменения данных в режиме реального времени и выполнять соответствующие побочные эффекты при изменении данных. Вот пример обработки асинхронного запроса:

Язык кода:markdown
копировать
<template>
  <div>
    <button @click="loadData">Load Data</button>
    <p v-for="item in data" :key="item.id">{{ item.name }}</p>
  </div>
</template>

<script>
import { ref, watch } from 'vue'

export default {
  setup() {
    const data = ref([])

    const loadData = async () => {
      const response = await fetch('https://api.example.com/data')
      const result = await response.json()
      data.value= result
    }

    watch(data, () => {
      // Perform side effect on data change
      console.log('Data changed:', data.value)
    })

    return {
      data,
      loadData
    }
  }
}
</script>

В приведенном выше коде,мы используемrefФункция создает адаптивный массивdata,Используется для хранения данных, возвращаемых асинхронными запросами. Затем,Мы определилиloadDataфункция,该функция会触发异步请求并将返回的数据赋值给data。проходитьwatchфункция,мы слушаемdataизменения,и выполнять обработку побочных эффектов при изменении данных,Например, вывести данные на консоль.

Подвести итог

Атрибут прослушивания Vue3 — это мощная и гибкая функция, которая может помочь нам отслеживать изменения данных в реальном времени и выполнять соответствующие операции при их изменении. Независимо от того, имеете ли вы дело с проверкой формы, обработкой данных или асинхронными запросами, атрибут прослушивателя может обеспечить хорошую поддержку.

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода