Компоненты в Vue3: определение компонента, свойства и события компонента, слоты компонентов и динамические компоненты.
Компоненты в Vue3: определение компонента, свойства и события компонента, слоты компонентов и динамические компоненты.

1. Введение

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

2. Основные понятия о компонентах

В Vue компоненты — это повторно используемые экземпляры Vue, которые можно использовать в приложении несколько раз. Компоненты могут инкапсулировать код HTML, CSS и JavaScript и повторно использовать их при необходимости. Компоненты могут иметь свои собственные шаблоны, данные, методы и перехватчики жизненного цикла.

2.1 Определение компонентов

Vue3Есть два способа определения компонентов:через объектный литерал или черезdefineComponentфункция。

Определение компонентов с помощью объектных литералов

Ниже Определение компонентов с помощью объектных литералов Пример:

Язык кода:markdown
копировать
const MyComponent = {
  template: '<div>Hello, Vue3!</div>'
}

В приведенном выше коде,Мы определяем компонентMyComponent,у него естьtemplateсвойство,Значение представляет собой HTML-строку. Эта строка HTML будет служить шаблоном компонента.

проходитьdefineComponentфункцияопределениекомпоненты

НижепроходитьdefineComponentфункцияопределениекомпоненты Пример:

Язык кода:markdown
копировать
import { defineComponent } from 'vue'

const MyComponent = defineComponent({
  template: '<div>Hello, Vue3!</div>'
})

В приведенном выше коде,мы используемdefineComponentфункцияопределение了одинкомпонентыMyComponent,Эта функция получает объект в качестве параметра,Этот объект содержит свойство и методы компонента.

2.2 Использование компонентов

В Vue использовать компоненты очень просто. Просто используйте тег компонента в шаблоне. Вот пример использования пользовательского компонента:

Язык кода:markdown
копировать
<template>
  <div>
    <h1>My App</h1>
    <my-component></my-component>
  </div>
</template>

<script>
import MyComponent from './MyComponent.vue'

export default {
  components: {
    MyComponent
  }
}
</script>

В приведенном выше коде,Мы использовали это в шаблоне родительского компонента<my-component>тег, чтобы представитьMyComponentкомпоненты。в то же время,В разделе JavaScript родительского компонента,проходитьcomponentsварианты будутMyComponentЗарегистрироваться как ребеноккомпоненты。

3. Свойства и события компонента

3.1 Свойства

В Вю,компоненты Можетпроходитьpropsсвойствопринимающий родителькомпонентыданные переданы。компонентыизсвойство Может由отецкомпонентыпрошло динамически,и использовать его в компоненте. Вот пример получения свойства:

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

<script>
export default {
  props: ['title']
}
</script>

В приведенном выше коде,Мы определилисвойствоtitle,проходитьpropsВозможность получения。Использовать в шаблоне{{ title }}отображатьсвойствоценить。

В родительском компоненте данные могут передаваться дочернему компоненту путем привязки свойств. Вот пример передачи свойств:

Язык кода:markdown
копировать
<template>
  <div>
    <child-component :title="parentTitle"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  data() {
    return {
      parentTitle: 'Hello, Vue3!'
    }
  },
  components: {
    ChildComponent
  }
}
</script>

В приведенном выше коде,мы будем отцомкомпонентыиз数据parentTitleпроходить:titleпривязать к ребенкукомпонентыизtitleсвойствоначальство。

3.2 События

компоненты Можетпроходить$emitНастройка триггера методасобытие,и передать данные родительскому компоненту. Родительские компоненты могут прослушивать эти пользовательские компоненты и реагировать соответствующим образом. Вот пример запуска и прослушивания событий:

Язык кода:markdown
копировать
<template>
  <div>
    <button @click="handleClick">Click Me</button>
  </div>
</template>

<script>
export default {
  methods: {
    handleClick() {
      this.$emit('customEvent', 'Hello, Vue3!')
    }
  }
}
</script>

В приведенном выше коде,когда кнопка нажата,вызоветhandleClickметод,ипроходить$emitметодвызвал звонокcustomEventКастомизациясобытие,и передал данныеHello, Vue3!

отецкомпоненты Можетпроходить Заизикомпонентыиз Этикетканачальствоиспользоватьv-onили@команда для мониторинга этого кастомасобытие。Нижемониторсобытие Пример:

Язык кода:markdown
копировать
<template>
  <div>
    <child-component @customEvent="handleCustomEvent"></child-component>
  </div>
</template>

<script>
import ChildComponent from './ChildComponent.vue'

export default {
  methods: {
    handleCustomEvent(data) {
      console.log(data) // Вывод: Здравствуйте! Vue3!
    }
  },
  components: {
    ChildComponent
  }
}
</script>

В приведенном выше коде,мы используем@customEventКонтролируемыйкомпоненты中触发изcustomEventсобытие,И вhandleCustomEventметод Получить всобытиеданные переданы。

4. Слоты компонентов

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

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

<script>
export default {}
</script>

В приведенном выше коде,мыкомпонентыиз模板中использовать了<slot></slot>Этикетка,Эта метка представляет слот,Используется для вставки содержимого, переданного родительским компонентом.

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

Язык кода:markdown
копировать
<template>
  <div>
    <my-component>
      <h1>My Title</h1>
      <p>My Content</p>
    </my-component>
  </div>
</template>

<script>
import MyComponent from './MyComponent.vue'

export default {
  components: {
    MyComponent
  }
}
</script>

В приведенном выше коде,наспроходитькомпонентыиз Этикетка Внутри есть один<h1>Этикеткаиодин<p>Этикетка,Это содержимое будет вставлено вMyComponentкомпонентыиз插槽中。

5. Динамические компоненты

В Vue динамические компоненты позволяют переключаться между несколькими компонентами. Различные компоненты могут визуализироваться динамически в зависимости от разных условий. Вот пример использования динамических компонентов:

Язык кода:markdown
копировать
<template>
  <div>
    <component :is="currentComponent"></component>
    <button @click="switchComponent">Switch</button>
  </div>
</template>

<script>
import FirstComponent from './FirstComponent.vue'
import SecondComponent from './SecondComponent.vue'

export default {
  data() {
    return {
      currentComponent: 'first'
    }
  },
  components: {
    FirstComponent,
    SecondComponent
  },
  methods: {
    switchComponent() {
      this.currentComponent = this.currentComponent === 'first' ? 'second' : 'first'
    }
  }
}
</script>

В приведенном выше коде,наспроходить:isсвойство Динамически визуализируются двакомпоненты:FirstComponentиSecondComponent。проходитьнажмите кнопку,Можно переключаться между двумя компонентами.

6. Функция перехвата жизненного цикла

Функции-перехватчики жизненного цикла компонентов Vue — это особые функции, которые вызываются на разных этапах работы компонента. В Vue3 изменилась функция перехвата жизненного цикла компонента. Ниже приведены некоторые часто используемые функции перехвата жизненного цикла:

  • beforeCreate:Вызывается перед созданием экземпляра,В настоящее время наблюдение и инициализация данных еще не начались.
  • created:Вызывается после создания экземпляра,На данный момент наблюдение и инициализация данных завершены.,Но он еще не смонтирован в DOM.
  • beforeMount:Вызывается перед монтажом,На этом компиляция шаблона завершена.
  • mounted:Вызывается после завершения монтирования,На этом этапе компонент смонтирован в DOM.
  • beforeUpdate:вызывается перед обновлением,В настоящее время данные обновлены,Но DOM еще не был перерисован.
  • updated:Вызывается после завершения обновления,На этом этапе компонент был перерисован.
  • beforeUnmount:Вызывается перед удалением,На данный момент компонент не был выгружен из DOM.
  • unmounted:Вызывается после завершения удаления,На этом этапе компонент выгружен из DOM.

7. Резюме

В этой статье подробно описываются компоненты Vue3, включая определение компонента, использование компонента, свойства и события компонента, слоты компонентов и динамические компоненты, а также функции перехвата жизненного цикла. Компоненты — очень важная концепция в разработке Vue, которая может улучшить возможность повторного использования и удобства сопровождения кода. Правильно используя компоненты, мы можем более эффективно создавать многофункциональные и интерактивные приложения. Я надеюсь, что благодаря этой статье вы получите более глубокое понимание и овладение компонентами Vue3. Я считаю, что в реальной разработке, с большей практикой и практикой, вы сможете лучше использовать компоненты 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 и детали кода