Упражнение 1 — создание первого компонента

Создание первого компонента на vue.js

Мы собираемся создать наш первый компонент внутри Vue., выполнив упражнение 1.
Для начала установите vue и vite - https://v3.ru.vuejs.org/ru/guide/installation.html#cli

Рекомендуем устанавливать сразу Vite используя терминал.

Например - npm init vite@latest test1 --template vue

После этого выбрать Vue, затем javascript

Выполните следующие шаги:

1. После установки следуйте инструкциям - перейдите в папку созданного проекта и выполните npm install.

2. Запустите приложение с помощью следующей команды:

npm run dev

3. Перейдите по адресу который указан в терминале , у меня это http://localhost:5173/

4. Откройте файл src/App.vue, удалите все в этом файле и сохраните.

6. В вашем браузере все должно быть пустым, чтобы начать работу.

7. Также необходимо настроить Vite, чтобы не мучаться с импортированием компонентов, для этого откроем vite.config.js внутри проекта и изменим его содержимое:

import { fileURLToPath } from 'url'
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
export default defineConfig({
  plugins: [
   vue({
     reactivityTransform: true,
   }),
],
resolve: {
  alias: {
    '@': fileURLToPath(new URL('./src', import.meta.url)),
  },
},
})

Данное изменение, необходимо для того, чтобы Vite  понимал префикс @, в пути к компоненте, как ссылку на папку src, без данной настройки, vite не найдет ваши компоненты.

8. Тремя основными компонентами, составляющими однофайловый компонент - <template>,
блоки <script> и <style>. Добавьте следующие блоки кода в качестве каркаса для компонента:

<template>
</template>
<script>
  export default {
  }
</script>
<style>
</style>

8. Создайте еще один файл в папке components с именем textComponent.vue и повторите
тот же шаг для создания предыдущего компонента Vue:

// src/components/textComponent.vue
<template>
</template>
<script>
  export default {
  }
</script>
<style>
</style>

9. В нашем компоненте textComponent.vue создайте набор тегов <div> с тегом <h1> внутри <template>:

<template>
  <div>
    <h1>My first component!</h1>
  </div>
</template>

10. Внутри блока <style> добавьте стили следующим образом:

<style>
h1 {
font-family: 'Avenir', Helvetica, Arial,
sans-serif;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>

11. Импортируйте наш компонент в App.vue, используя метод импорта ES6 и указав
компонент внутри объекта компонентов в блоке <script>. Теперь мы можем ссылаться на это
компонент внутри HTML, используя его имя в camelCase или kebab-case (оба варианта будут работать):

<template>
  <textComponent />
</template>
<script>
  import textComponent from '@/components/textComponent.vue'
  export default {
    components: {
      Exercise,
    }
  }
</script>

Обратите внимание - мы добавили в путь импортированного компонента @, которую настроили в vite.config, и теперь vite найдет созданный компонент.

Когда вы нажимаете Ctrl + S (или Cmd + S в macOS), https://localhost:3000
должен перезагрузиться и выглядеть потрясающе:

В этом упражнении мы увидели, как структурировать компоненты Vue. Мы также создали новый компонент и успешно его импортировали, и добавили его в поле component объекта vue.

В следующем разделе мы получим представление о том, как определить локальное состояние данных компонента с использованием свойств данных.

 

Изучение свойств данных как локального состояния

Один из наиболее часто используемых терминов и реактивных элементов, используемых при построении
Компоненты Vue — это свойства данных. Они добавляются в свойстве data() экземпляра Vue:

<script>
export default {
  data() {
  return {
    color: 'red'
  }
 }
}
</script>

Вы можете использовать функцию data() для создания локального объекта данных и по существу
хранить любую информацию, которую вы хотите использовать в своих шаблонах Vue. Это свойство привязано к компоненту, и мы называем его локальными данными состояния
компонента.

Когда какое-либо свойство этого локального объекта обновляется или изменяется, оно
будет реактивно обновляться в соответствующем шаблоне.

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

В контексте Vue мы используем двойные скобки - {{}} в HTML-шаблоне компонента.

Рассмотрим следующий пример:

<template>
  <span> {{ color }}</span>
</template >
<script>
  export default {
    data() {
      return {
        color: 'red'
      }
    }
   }
</script>

Свойство данных color:red привязано к реактивным данным Vue.js и будет обновляться во время выполнения, в зависимости от изменений состояния между пользовательским интерфейсом и его данными.
На этом этапе мы должны рассмотреть, как определить и связать локальные данные классическим методом в vue.

С Vue 3.0 нам нравится более короткий и простой подход к написанию и импорту компонентов. Давайте рассмотрим это дальше.

Написание компонентов с composition API

Начиная с Vue 3.0, Vue представляет новый атрибут настройки синтаксического сахара для тега <script>. Этот атрибут позволяет вам писать код, используя
Composition API (о котором мы поговорим далее) в SFC и сократить объем кода, необходимого для написание простых компонентов.

Блок кода, находящийся в теге <script setup>, будет компилируется в функцию render() перед развертыванием в браузере, обеспечивая лучшую производительность во время выполнения. Чтобы начать использовать этот синтаксис, возьмем следующий пример кода:

// header.vue
<script>
  import logo from 'components/logo.vue'
  export default {
    components: {
       logo
    }
  }
</script>

Затем мы заменяем <script> на <script setup> и удаляем весь код и блоки export default. Код примера теперь выглядит следующим образом:

// header.vue
<script setup>
  import logo from 'components/logo.vue'
</script>

В <template> мы используем логотип как обычно:

<template>
  <header>
    <a href="mywebsite.com">
      <logo />
    </a>
  </header>
</template>

Т.е мы можем использовать компонент сразу после его импорта, минуя добавление его в объект components. Наш предыдущий файл App.js написанный с использованием Composition API, будет выглядеть так:

<template> 
  <textComponent/>
</template>
<script setup>
import textComponent from '@/components/textComponent.vue'
</script> 

Чтобы определить и использовать локальные данные, вместо использования data() мы можем объявить обычные
переменные как локальные данные и функции как локальные методы для этого компонента напрямую.

Например, чтобы объявить и отобразить локальное свойство данных цвета, мы используем следующий код:

<script setup>
  const color = 'red';
</script>
<template>
  <div>{{color}}</div>
</template>

Предыдущий код выводит тот же результат, что и в предыдущем примере раздел - red.

Но при таком подходе, наша переменная color будет статична, для того чтобы она была реактивна нужно указать vue, что данную переменную, необходимо сделать реактивной с помощью методов ref или reactive, это мы рассмотрим далее.

Как упоминалось в начале этого раздела, <script setup> является наиболее полезно, когда вам нужно использовать Composition API внутри SFC. Тем не менее, мы можем
всегда его использовать для простых компонентов.

С этого момента мы будем комбинировать оба подхода и использовать <script setup> как только возможно.

В следующем упражнении мы более подробно рассмотрим, как использовать интерполяция и данные.