Українська

Дослідіть Composition API у Vue.js 3. Навчіться створювати повторно використовувані та тестовані додатки з прикладами та найкращими практиками для розробників.

Composition API у Vue.js 3: Глибоке занурення для глобальних розробників

Vue.js швидко став популярним вибором для створення сучасних веб-додатків завдяки своїй доступній кривій навчання та потужним функціям. Vue.js 3 йде ще далі, представляючи Composition API — новий спосіб організації логіки ваших компонентів. Цей глибокий огляд надає вичерпний посібник для розуміння та ефективного використання Composition API, озброюючи вас навичками для створення більш підтримуваних, повторно використовуваних та тестованих додатків Vue.

Що таке Composition API?

Composition API — це набір API, які дозволяють нам створювати компоненти Vue за допомогою імпортованих функцій замість оголошення опцій. По суті, він дозволяє групувати пов'язану логіку разом, незалежно від того, де вона з'являється в шаблоні. Це контрастує з Options API (data, methods, computed, watch), який змушує вас організовувати код на основі цих попередньо визначених категорій. Уявляйте Options API як організацію коду за тим, *чим* він є (дані, метод тощо), тоді як Composition API дозволяє організовувати код за тим, *що він робить*.

Ядро Composition API обертається навколо функції setup(). Ця функція є точкою входу для використання Composition API всередині компонента. Усередині setup() ви можете визначати реактивний стан, обчислювані властивості, методи та хуки життєвого циклу за допомогою композиційних функцій.

Навіщо використовувати Composition API?

Composition API пропонує кілька переваг у порівнянні з традиційним Options API, особливо для великих та складних додатків:

Розуміння основних концепцій

Давайте зануримося в ключові концепції, що лежать в основі Composition API:

1. setup()

Як згадувалося раніше, setup() є точкою входу для використання Composition API. Це опція компонента, яка виконується до створення компонента. Усередині setup() ви визначаєте реактивний стан, обчислювані властивості, методи та хуки життєвого циклу, а потім повертаєте об'єкт, що містить значення, які ви хочете зробити доступними для шаблону.

Приклад:

import { ref } from 'vue'

export default {
  setup() {
    const count = ref(0)

    const increment = () => {
      count.value++
    }

    return {
      count,
      increment
    }
  }
}

У цьому прикладі ми використовуємо ref для створення реактивної змінної під назвою count. Ми також визначаємо метод increment, який збільшує значення count. Нарешті, ми повертаємо об'єкт, що містить count та increment, що робить їх доступними в шаблоні компонента.

2. Реактивний стан з ref та reactive

Composition API надає дві основні функції для створення реактивного стану: ref та reactive.

Приклад з використанням ref:

import { ref } from 'vue'

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

    const updateMessage = (newMessage) => {
      message.value = newMessage
    }

    return {
      message,
      updateMessage
    }
  }
}

Приклад з використанням reactive:

import { reactive } from 'vue'

export default {
  setup() {
    const state = reactive({
      name: 'John Doe',
      age: 30
    })

    const updateName = (newName) => {
      state.name = newName
    }

    return {
      state,
      updateName
    }
  }
}

3. Обчислювані властивості з computed

Обчислювані властивості — це значення, які виводяться з іншого реактивного стану. Вони автоматично оновлюються щоразу, коли змінюються їхні залежності. Функція computed приймає функцію-геттер як аргумент і повертає реактивний ref, доступний лише для читання.

Приклад:

import { ref, computed } from 'vue'

export default {
  setup() {
    const firstName = ref('John')
    const lastName = ref('Doe')

    const fullName = computed(() => {
      return `${firstName.value} ${lastName.value}`
    })

    return {
      firstName,
      lastName,
      fullName
    }
  }
}

У цьому прикладі fullName є обчислюваною властивістю, яка залежить від firstName та lastName. Щоразу, коли змінюється firstName або lastName, fullName буде автоматично оновлюватися.

4. Спостерігачі з watch та watchEffect

Спостерігачі дозволяють вам реагувати на зміни в реактивному стані. Composition API надає два основних способи створення спостерігачів: watch та watchEffect.

Приклад з використанням watch:

import { ref, watch } from 'vue'

export default {
  setup() {
    const count = ref(0)

    watch(
      count,
      (newValue, oldValue) => {
        console.log(`Count changed from ${oldValue} to ${newValue}`)
      }
    )

    const increment = () => {
      count.value++
    }

    return {
      count,
      increment
    }
  }
}

Приклад з використанням watchEffect:

import { ref, watchEffect } from 'vue'

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

    watchEffect(() => {
      console.log(`Message is: ${message.value}`)
    })

    const updateMessage = (newMessage) => {
      message.value = newMessage
    }

    return {
      message,
      updateMessage
    }
  }
}

5. Хуки життєвого циклу

Composition API надає доступ до хуків життєвого циклу компонента через функції, що починаються з on, такі як onMounted, onUpdated, та onUnmounted. Ці функції приймають колбек як аргумент, який буде виконано, коли спрацює відповідний хук життєвого циклу.

Приклад:

import { onMounted, onUnmounted } from 'vue'

export default {
  setup() {
    onMounted(() => {
      console.log('Component is mounted')
    })

    onUnmounted(() => {
      console.log('Component is unmounted')
    })

    return {}
  }
}

Створення композиційних функцій

Справжня сила Composition API полягає у можливості створювати композиційні функції для повторного використання. Композиційна функція — це просто функція, яка інкапсулює частину логіки компонента і повертає реактивний стан та функції, які можна використовувати в кількох компонентах.

Приклад: Давайте створимо композиційну функцію, яка відстежує положення миші:

import { ref, onMounted, onUnmounted } from 'vue'

export function useMousePosition() {
  const x = ref(0)
  const y = ref(0)

  const updatePosition = (event) => {
    x.value = event.clientX
    y.value = event.clientY
  }

  onMounted(() => {
    window.addEventListener('mousemove', updatePosition)
  })

  onUnmounted(() => {
    window.removeEventListener('mousemove', updatePosition)
  })

  return {
    x,
    y
  }
}

Тепер ви можете використовувати цю композиційну функцію в будь-якому компоненті:

import { useMousePosition } from './useMousePosition'

export default {
  setup() {
    const { x, y } = useMousePosition()

    return {
      x,
      y
    }
  }
}

Практичні приклади та випадки використання

Розглянемо деякі практичні приклади того, як Composition API можна використовувати в реальних сценаріях:

1. Отримання даних

Створення композиційної функції для отримання даних з API є поширеним випадком використання. Це дозволяє вам повторно використовувати ту саму логіку отримання даних у кількох компонентах.

import { ref, onMounted } from 'vue'

export function useFetch(url) {
  const data = ref(null)
  const error = ref(null)
  const loading = ref(true)

  onMounted(async () => {
    try {
      const response = await fetch(url)
      data.value = await response.json()
    } catch (err) {
      error.value = err
    } finally {
      loading.value = false
    }
  })

  return {
    data,
    error,
    loading
  }
}

Потім ви можете використовувати цю композиційну функцію у своїх компонентах так:

import { useFetch } from './useFetch'

export default {
  setup() {
    const { data, error, loading } = useFetch('https://api.example.com/data')

    return {
      data,
      error,
      loading
    }
  }
}

2. Валідація форм

Валідація форм — це ще одна область, де Composition API може бути дуже корисним. Ви можете створювати композиційні функції, які інкапсулюють логіку валідації та повторно використовувати їх у різних формах.

import { ref } from 'vue'

export function useValidation() {
  const errors = ref({})

  const validateField = (fieldName, value, rules) => {
    let error = null
    for (const rule of rules) {
      if (rule === 'required' && !value) {
        error = 'This field is required'
        break
      } else if (rule === 'email' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(value)) {
        error = 'Invalid email format'
        break
      }
    }

    if (error) {
      errors.value[fieldName] = error
    } else {
      delete errors.value[fieldName]
    }
  }

  return {
    errors,
    validateField
  }
}

Використання в компоненті:

import { useValidation } from './useValidation'
import { ref } from 'vue'

export default {
  setup() {
    const { errors, validateField } = useValidation()
    const email = ref('')

    const validateEmail = () => {
      validateField('email', email.value, ['required', 'email'])
    }

    return {
      email,
      errors,
      validateEmail
    }
  }
}

3. Керування автентифікацією користувача

Логіка автентифікації часто може бути складною і дублюватися в кількох компонентах. Composition API дозволяє створити композиційну функцію, яка інкапсулює всю логіку автентифікації та надає чистий API для використання вашими компонентами.

Приклад: (Спрощено)

import { ref } from 'vue'

export function useAuth() {
  const isLoggedIn = ref(false)
  const user = ref(null)

  const login = async (username, password) => {
    // Simulate API call
    await new Promise(resolve => setTimeout(resolve, 1000))
    isLoggedIn.value = true
    user.value = { username }
  }

  const logout = async () => {
    // Simulate API call
    await new Promise(resolve => setTimeout(resolve, 1000))
    isLoggedIn.value = false
    user.value = null
  }

  return {
    isLoggedIn,
    user,
    login,
    logout
  }
}

Найкращі практики використання Composition API

Щоб отримати максимальну користь від Composition API, дотримуйтесь наступних найкращих практик:

Поширені помилки та як їх уникнути

Хоча Composition API пропонує багато переваг, існують також деякі поширені помилки, про які варто знати:

Composition API та глобальні команди

Composition API сприяє співпраці в глобальних командах розробників, просуваючи:

Висновок

Composition API у Vue.js 3 — це потужний інструмент, який може значно покращити організацію, повторне використання та тестованість ваших додатків Vue. Розуміючи основні концепції та дотримуючись найкращих практик, викладених у цьому глибокому огляді, ви можете використовувати Composition API для створення більш підтримуваних та масштабованих додатків для глобальної аудиторії. Прийміть Composition API та розкрийте весь потенціал Vue.js 3.

Ми заохочуємо вас експериментувати з Composition API у ваших власних проектах та досліджувати величезні можливості, які він пропонує. Вдалого кодування!