Что такое компоненты и приведите пример?vue-25

Что такое компоненты в Vue?

Компоненты — это основные строительные блоки приложений Vue.js. Они представляют собой:

  1. Переиспользуемые экземпляры Vue с собственными:
    • Шаблоном (template)
    • Логикой (script)
    • Стилями (style)
  2. Инкапсулированные элементы UI, которые можно комбинировать для создания сложных интерфейсов
  3. Собственные экосистемы с:
    • Входными параметрами (props)
    • Событиями (emits)
    • Локальным состоянием (data)
    • Методами (methods)
    • Хуками жизненного цикла

Основные характеристики компонентов

  1. Иерархическая структура: Приложения строятся как дерево компонентов
  2. Изолированность: Каждый компонент имеет свою область видимости
  3. Коммуникация через:
    • Props (нисходящий поток данных)
    • Events (восходящий поток)
    • Provide/Inject (для глубоко вложенных компонентов)

Пример базового компонента

<template>
  <button
    @click="increment"
    :class="{ 'active': isActive }"
  >
    Счёт: {{ count }}
  </button>
</template>

<script>
export default {
  name: 'CounterButton',
  props: {
    initialCount: {
      type: Number,
      default: 0
    }
  },
  data() {
    return {
      count: this.initialCount,
      isActive: false
    }
  },
  methods: {
    increment() {
      this.count++
      this.isActive = !this.isActive
      this.$emit('count-changed', this.count)
    }
  }
}
</script>

<style scoped>
button {
  padding: 8px 16px;
  background: #42b983;
  color: white;
  border: none;
  border-radius: 4px;
}
button.active {
  background: #35495e;
}
</style>

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

<template>
  <div>
    <h1>Пример приложения</h1>
    <CounterButton
      :initial-count="5"
      @count-changed="handleCountChange"
    />
  </div>
</template>

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

export default {
  components: {
    CounterButton
  },
  methods: {
    handleCountChange(newCount) {
      console.log('Новое значение счётчика:', newCount)
    }
  }
}
</script>

Компоненты в Options API vs Composition API

Options API

export default {
  data() {
    return { count: 0 }
  },
  methods: {
    increment() { this.count++ }
  }
}

Composition API

import { ref } from 'vue'

export default {
  setup() {
    const count = ref(0)
    const increment = () => count.value++

    return { count, increment }
  }
}

Регистрация компонентов

  1. Локальная регистрация:
import MyComponent from './MyComponent.vue'

export default {
  components: {
    MyComponent
  }
}
  1. Глобальная регистрация (не рекомендуется для больших приложений):
import { createApp } from 'vue'
import App from './App.vue'
import MyComponent from './MyComponent.vue'

const app = createApp(App)
app.component('MyComponent', MyComponent)
app.mount('#app')

Резюмируем:

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